极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28420|回复: 8

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

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

使用道具 举报

发表于 2014-7-28 12:46:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-7-28 13:57:06 | 显示全部楼层
rx  tx交叉,还有一个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
rx  tx交叉,还有一个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号板用下载线接到电脑上,理论上能观测到数据吗?
回复 支持 反对

使用道具 举报

发表于 2014-7-28 15:23:01 | 显示全部楼层
不要使用第一串口Serial互连,因为电脑串口也接在第一串口,三个串口连在一起互相影响了。


可以使用Serial1,Serial2或者SoftwareSerial

回复 支持 反对

使用道具 举报

发表于 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
不要使用第一串口Serial互连,因为电脑串口也接在第一串口,三个串口连在一起互相影响了。

ok!确实提醒我了!谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-31 15:01:36 | 显示全部楼层
经过测试,在另一块板子中开虚拟串口,可以达到这个目的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 16:48 , Processed in 0.053157 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表