Последовательная связь между двумя платами Arduino - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь установить последовательную связь между двумя Arduinos.

Я использовал эту принципиальную схему , и этот код отлично работает;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    switch(Serial.read())
    { case 'A':
      digitalWrite(13,HIGH);
      break;
      case 'B':
      digitalWrite(13,LOW);
      break;
    }
}
}

Но я не хочу использовать распределительный шкаф. Я хочу использовать, если условия. Я пытаюсь этот код;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    if(Serial.read()=='A')
    {
      digitalWrite(13,HIGH);
    }
    else if(Serial.read()=='B')
    {
      digitalWrite(13,LOW);
    }
}
}

Но это не работает. Мой вопрос почему работает с коммутатором, а не с условиями. Где моя вина? Вы можете это исправить?

Спасибо.

1 Ответ

0 голосов
/ 11 мая 2019

Я пробовал оба кода и думаю, что проблема в чтении данных.Здесь следует мои тестовые коды.Код отправителя:

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("A"),
  delay(1000);
  Serial.println("B"),
  delay(1000);
}

Код получателя:

int data;
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
if (Serial.available()) {
    data = Serial.read();
    if(data=='A')
    {
      digitalWrite(13,HIGH);
    }
    else if(data=='B')
    {
      digitalWrite(13,LOW);
    }
  }
}

Когда вы пытаетесь проверить данные, считанные из последовательной связи, всегда рекомендуется сохранять буфер в переменную, а затем делать всеконтрольный материал.Таким образом, вы можете быть уверены, что данные всегда одинаковы.Здесь более жесткое объяснение.Когда вы делаете оператор if, подобный тому, который вы тестировали, вы на самом деле не проверяете одно и то же значение в одном цикле. if(Serial.read()=='A') и else if(Serial.read()=='B') фактически проверяют два разных чтения из последовательного в два разных времени.Когда вместо этого вы делаете одно чтение с data = Serial.read() и сравниваете показания, хранящиеся в переменной, с ожидаемым значением, таким как data == 'A', чтение выполняется только один раз и «остается неизменным» на протяжении всего цикла.Обратите внимание, что в моем тесте это сравнение выполняется с символом char ('') not ("").

Надеюсь, я помог решить вашу проблему.Дайте нам знать, что это работает для вас

...