小飞 发表于 2014-7-28 12:01:29

关于两块Arduino控制板之间的串行通讯

求助:
          最近想用两块UNO控制板作串行通讯,一块板子给另一块板子发数据,另一块板子根据接收的数据进行相应的动作。
         目前,我的测试方法:利用1号板子做一个开关按钮,当开关断开和闭合时分别发送不同的字符    ‘a’和 ‘b’。然后将1号板子的TX和RX采用交叉连接方法连接到二号板子的 RX,TX,根据Serial.read();判断读取的字符,然后进行相应的动作。现在2号板子一直没东西,采用监视工具也查询不到有接受字符。
         有没有高手指点一下?如果有个类似的例子更加感谢。
                     

i7456 发表于 2014-7-28 12:46:20

http://arduino.cc/en/Tutorial/ReadASCIIString

zoologist 发表于 2014-7-28 13:57:06

rxtx交叉,还有一个gnd也要连在一起

小飞 发表于 2014-7-28 14:13:26

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也共地了,还没出来。高手们指点一下问题点在哪?

小飞 发表于 2014-7-28 14:28:02

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号板用下载线接到电脑上,理论上能观测到数据吗?

Ansifa 发表于 2014-7-28 15:23:01

不要使用第一串口Serial互连,因为电脑串口也接在第一串口,三个串口连在一起互相影响了。


可以使用Serial1,Serial2或者SoftwareSerial

Super169 发表于 2014-7-28 17:16:00

本帖最后由 Super169 于 2014-7-28 17:18 编辑

Serial.print(Ar); <- 問題應該在這裡

val=Serial.read(); <- 不會讀出原來 Ar 的數值

先了解一下 Serial.print 及 Serial.write 的分別.

小飞 发表于 2014-7-29 18:00:19

Ansifa 发表于 2014-7-28 15:23 static/image/common/back.gif
不要使用第一串口Serial互连,因为电脑串口也接在第一串口,三个串口连在一起互相影响了。




ok!确实提醒我了!谢谢!

小飞 发表于 2014-7-31 15:01:36

经过测试,在另一块板子中开虚拟串口,可以达到这个目的。
页: [1]
查看完整版本: 关于两块Arduino控制板之间的串行通讯