Я пробовал оба кода и думаю, что проблема в чтении данных.Здесь следует мои тестовые коды.Код отправителя:
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 ("").
Надеюсь, я помог решить вашу проблему.Дайте нам знать, что это работает для вас