Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

renoshnik
2020-06-13 18:05:41
Рамиль пише:

Я вот так получаю данные от компа:

Читайте еще раз http://arduino.ru/Reference/Serial/Read

Mishka
2020-06-13 16:41:06

Разве компилятор не выдает ошибку для 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"?

В этом смысле может оказаться, что намного прагматичнее использовать однобайтовые команды: и быстрее передаются, и проще код, и меньше неоднозначностей.

Рамиль
2020-06-13 15:00:04

Я вот так получаю данные от компа:

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;  
      ...
    }
    }
  }
renoshnik
2020-06-13 11:41:49
Рамиль пише:

Так вот я и спрашиваю - как правильно?

правильно это не так как вы делаете, а как вы делаете я не знаю.
но судя по результату вы делаете неправильно.

vvr
2020-06-13 06:54:15

вы пока не показали как вы делаете....

Рамиль
2020-06-12 21:15:47

Так вот я и спрашиваю - как правильно?

renoshnik
2020-06-12 16:09:11

Делайте правильное чтение данных из порта.

Рамиль
2020-06-12 14:29:54

Привет!

Сделал одну модель с дистанционным управлением по 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; 
    }

Последний код, конечно же, не работает как нужно. Как сделать правильно?

Підвал форуму