Arduino Bluetooth связь
У меня есть вопрос о BT-связи между Arduino и модулем HC-05 с использованием Serial comm. Я пытаюсь управлять режимами подсветки RGB на моем Arduino nano через BT Terminal на моем телефоне (в будущем это будет приложение для Android), но я застрял там, где мне нужно проверить, является ли отправленная команда буквой или строкой с цвет. Ниже приведен пример:
Я хочу использовать режим, в котором буква T установлена как команда, поэтому у меня есть код:
if (Serial.available()) {
mode = Serial.read();
if( mode == 'T') {doSomething(); }
и он работает отлично, но теперь я хотел отправить по цвету BT RGB, как 255,255,255, а затем поместить его в код
leds[i].r = redInt;
leds[i].g = greenInt;
leds[i].b = blueInt;
Я пытался сохранить его как строку, а затем, если это не какой-либо из режимов, проанализировать его в int
х (redInt
, greenInt
, blueInt
) но я не знаю как это сделать. Я пробовал с parseInt
, но он говорит, что не будет работать со строкой. Вопрос в том, как сохранить входящие Serial.read()
как строка и после проверки, если это не так, команда, как проанализировать его в 3 отдельных int
это позволить мне настроить цвет?
1 ответ
HC-05/HC-06 принимает строку как последовательность символов. Если вы хотите отправить 255, то HC-05 принимает это как "2", "5", "5". Итак, ваша первая работа - определить, является ли это целое число или строка. Я добавил другой префикс перед целым числом и строкой и общий постфикс ('#'), по которому я могу определить конец ввода. Надеюсь, это поможет вам.
while (Serial.available()) {
delay(3); //small delay to allow input buffer to fill
char c = Serial.read(); //gets one byte from serial buffer
if (c == '#') {
break;
} //breaks out of capture loop to print readstring
readString += c;
}
После того, как вы все взяли на себя, вы должны выяснить, что вы взяли с помощью префикса.
if (readString.charAt(0) == 'i')
{
//"i255,255,255#"
readString.replace("i", "0");
value1 = readString.substring(1, 3).toInt();
value2 = readString.substring(5, 7).toInt();
value3 = readString.substring(8, 11).toInt();
readString = "";
}
else if (readString.charAt(0) == 's')
{
//Do as you wish
readString = "";
}