Ви не увійшли.
Сторінки 1
Привет!
Сделал одну модель с дистанционным управлением по bluetooth с помощью hc-06. Управляется с помощью специального приложения с компьютера. Например, приложение отправляет сигнал A или B, и скеч обрабатывает его так:
switch (control) {
case 'A': functionA(); break;
case 'B': functionB(); break;
}
Подскажите, как сделать, чтобы скеч корректно обрабатывал отправку двух или более символов. Например, "A1" и "B2". И скеч обрабатывает:
switch (control) {
case "A1": functionA(); break;
case "B2": functionB(); break;
}
Последний код, конечно же, не работает как нужно. Как сделать правильно?
Остання редакція Рамиль (2020-06-12 14:30:56)
Неактивний
Я вот так получаю данные от компа:
char control;
void setup() {
...
Serial.begin (9600);
}
void loop()
{
if (Serial.available() > 0) {
control = Serial.read();
switch (control) {
{
case "A1": functionA(); break;
case "B2": functionB(); break;
...
}
}
}
Неактивний
Разве компилятор не выдает ошибку для case "A1"? Как оно вообще собирается?
Оператор case ожидает целочисленное значение. Это неплохо работает со следующей конструкцией, потому что 'А' фактически является числом 65 и C может свободно привести char к int, обратите внимание на одинарные кавычки.
switch (command) {
case 'A':
functionA();
break;
...
}
Но строки типа "A1" являются регионами памяти и запись case "A1" будет синтаксически неверной.
Касательно сути вопроса. Serial.read() возвращает всего один (первый) байт из буфера, поэтому чтобы обрабатывать больше, нужно либо сохранять прочитанные байты между вызовами loop(), либо читать весь буфер Serial в контексте одного вызова loop(). Также возникает вопрос, что произойдет, если передать две команды "А1" и "B2" подряд? Подозреваю - поправьте меня, пожалуйста, если это не так - что они будут прочитаны как одна команда "A1B2". А если два устройства будут заполнять буфер Serial одновременно, не возникнет ситуация, когда результат окажется чем-то вроде "AB12"?
В этом смысле может оказаться, что намного прагматичнее использовать однобайтовые команды: и быстрее передаются, и проще код, и меньше неоднозначностей.
Остання редакція Mishka (2020-06-13 16:42:09)
Неактивний
Я вот так получаю данные от компа:
Читайте еще раз http://arduino.ru/Reference/Serial/Read
Неактивний
Сторінки 1