Arduino Bluetooth связь - PullRequest
       22

Arduino Bluetooth связь

0 голосов
/ 16 января 2019

У меня вопрос по BT-связи между Arduino и модулем HC-05 с использованием последовательной связи. Я пытаюсь управлять режимами подсветки 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 Ответ

0 голосов
/ 16 января 2019

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 = "";
}
...