两个 Arduino 板之间的串行通信
Serial Communication Between Two Arduino Boards
我正在尝试在两个 Arduino 之间进行串行通信。
我使用了这个 circuit diagram 并且这段代码工作得很好;
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;
}
}
}
但我不想使用 switch-case。我想使用 if 条件。我正在尝试这段代码;
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);
}
}
}
但是没用。我的问题是;为什么适用于 switch-case 但不适用于 if 条件。我的错在哪里?你能修好吗?
谢谢。
两种代码我都试过了,我认为问题出在数据读取上。下面是我的测试代码。
发件人代码:
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'
进行比较时,读数仅完成一次并且 "remain the same" 通过整个循环。
请注意,在我的测试中,它是用 char ('') 而不是 ("") 进行的比较。
希望我帮助您解决了问题。让我们知道它适合您
我正在尝试在两个 Arduino 之间进行串行通信。
我使用了这个 circuit diagram 并且这段代码工作得很好;
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;
}
}
}
但我不想使用 switch-case。我想使用 if 条件。我正在尝试这段代码;
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);
}
}
}
但是没用。我的问题是;为什么适用于 switch-case 但不适用于 if 条件。我的错在哪里?你能修好吗?
谢谢。
两种代码我都试过了,我认为问题出在数据读取上。下面是我的测试代码。 发件人代码:
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'
进行比较时,读数仅完成一次并且 "remain the same" 通过整个循环。
请注意,在我的测试中,它是用 char ('') 而不是 ("") 进行的比较。
希望我帮助您解决了问题。让我们知道它适合您