关于两块Arduino控制板之间的串行通讯
求助:最近想用两块UNO控制板作串行通讯,一块板子给另一块板子发数据,另一块板子根据接收的数据进行相应的动作。
目前,我的测试方法:利用1号板子做一个开关按钮,当开关断开和闭合时分别发送不同的字符 ‘a’和 ‘b’。然后将1号板子的TX和RX采用交叉连接方法连接到二号板子的 RX,TX,根据Serial.read();判断读取的字符,然后进行相应的动作。现在2号板子一直没东西,采用监视工具也查询不到有接受字符。
有没有高手指点一下?如果有个类似的例子更加感谢。
http://arduino.cc/en/Tutorial/ReadASCIIString rxtx交叉,还有一个gnd也要连在一起 1号板子的程序:
int Switch_Pin=2;//开关按钮
int Ar='a';
int Br='b';
void setup()
{
Serial.begin(9600);
pinMode(LED,OUTPUT);
pinMode(Switch_Pin,INPUT);
}
void loop()
{
if(digitalRead(Switch_Pin)==HIGH)
{
Serial.print(Ar);
delay(500);
}
else
{
Serial.print(Br);
delay(500);
}
}
2号板子的程序:
int LED =3;
int val;
int Ar ='a';
int Br ='b';
void setup()
{
Serial.begin(9600);
pinMode(LED,OUTPUT);
}
void loop()
{
if(Serial.available())
{
val=Serial.read();
if(val == Ar)
{
digitalWrite(LED,HIGH);
delay(500);
}
else
{digitalWrite(LED,LOW);
delay(500);
}
}//if
}
目前rx和tx交叉了,GND也共地了,还没出来。高手们指点一下问题点在哪? zoologist 发表于 2014-7-28 13:57 static/image/common/back.gif
rxtx交叉,还有一个gnd也要连在一起
1号板子的程序:
int Switch_Pin=2;//开关按钮
int Ar='a';
int Br='b';
void setup()
{
Serial.begin(9600);
pinMode(LED,OUTPUT);
pinMode(Switch_Pin,INPUT);
}
void loop()
{
if(digitalRead(Switch_Pin)==HIGH)
{
Serial.print(Ar);
delay(500);
}
else
{
Serial.print(Br);
delay(500);
}
}
2号板子的程序:
int LED =3;
int val;
int Ar ='a';
int Br ='b';
void setup()
{
Serial.begin(9600);
pinMode(LED,OUTPUT);
}
void loop()
{
if(Serial.available())
{
val=Serial.read();
if(val == Ar)
{
digitalWrite(LED,HIGH);
delay(500);
}
else
{digitalWrite(LED,LOW);
delay(500);
}
}//if
}
目前rx和tx交叉了,GND也共地了,还没出来。高手们指点一下问题点在哪?
一开始我还顾虑传输的数据会不会变成ASCII码的问题,现在我全部改成一种数据类型。
还有,因为现在2号板的0,1号口已经在串行通讯了,如果我再将2号板用下载线接到电脑上,理论上能观测到数据吗? 不要使用第一串口Serial互连,因为电脑串口也接在第一串口,三个串口连在一起互相影响了。
可以使用Serial1,Serial2或者SoftwareSerial
本帖最后由 Super169 于 2014-7-28 17:18 编辑
Serial.print(Ar); <- 問題應該在這裡
val=Serial.read(); <- 不會讀出原來 Ar 的數值
先了解一下 Serial.print 及 Serial.write 的分別.
Ansifa 发表于 2014-7-28 15:23 static/image/common/back.gif
不要使用第一串口Serial互连,因为电脑串口也接在第一串口,三个串口连在一起互相影响了。
ok!确实提醒我了!谢谢! 经过测试,在另一块板子中开虚拟串口,可以达到这个目的。
页:
[1]