查看: 11774|回复: 6

[经验] 两个Arduino串口通信

[复制链接]
  • TA的每日心情
    开心
    2019-3-3 21:12
  • 签到天数: 68 天

    [LV.6]常住居民II

    发表于 2018-1-5 20:10 | 显示全部楼层 |阅读模式
    本帖最后由 allen100 于 2018-1-30 15:28 编辑

    要说以前,我只用过Arduino与电脑通信,电脑作为上位机发送数据,Arduino接受到数据然后,进行分析并做相应的处理。
    思来想去,想试一试两个Arduino板进行串口通信,于是开始行动了。
    我的初步设想是这样的,一个Arduino mega 2560作为上位机,给作为下位机的Arduino UNO发送数据,当Arduino UNO
    接受到数据之后,显示在由UNO控制的lcd1602上。那么怎么实现呢?
    先看一下效果吧:



    首先编写上位机程序:

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
    }

    void loop() {
      // put your main code here, to run repeatedly:
        char s[]="I love Xu Qiling";//每隔3s发送一次字符数组s
        Serial.print(s);
        delay(3000);
    }

    这个程序没有什么高大上的功能,就是每隔3s通过串口发送出去一个字符串。把这个程序上传到Arduino mega 2560上。

    然后编写下位机程序:

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <LiquidCrystal.h>
    LiquidCrystal lcd(2,3,4,5,6,7);
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      lcd.begin(16,02);
    }
    void loop() {
       char a[20];//定义字符数组,接受来自上位机Arduino mega 2560的数据
       int i=0;
       lcd.clear();//清屏
       while(!Serial.available());//等待数据传送过来,若没有数据,一直等待,即执行到本行不向下执行
       while(Serial.available())//当发现缓存中有数据时,将数据送至字符数组a中
       {
         a=Serial.read();
         i++;
         delay(3);
       }
      lcd.setCursor(0,0);//从lcd1602的第一行第一列开始显示
      lcd.print(a);//把字符串a输出到显示器
      delay(2000);
    }



    这是下位机程序,上传到Arduino uno上。至于uno与1602怎么接线,就不多说了,根据程序把RS,EN,d4,d5,d6,d7接好,其他的没有特殊要求,
    按照通用的要求去接就行了。

    然后两个Arduino板要共地。一个板子的TX接到另一个板子的RX上,就行了。还有就是上传程序的时候,板子的RX和TX不要接上,要不然上传
    不到板子上,具体我还不知道为什么。

    还有就是上位机延时3s,下位机延时2s,上位机要比下位机延时长一些,不能短。要不然下位机来不及处理。

    最后上图
    _thumpic_201801_20180105200803a2eb3a01facc44fc93a36f15f810a2c8xxw4el.jpg
    我也是新手,希望大家多多批评指正,多多提意见,互相学习,谢谢。

    另外,我的博客:www.iilala.com
    邮箱:953598974@qq.com


  • TA的每日心情
    开心
    2019-3-3 21:12
  • 签到天数: 68 天

    [LV.6]常住居民II

     楼主| 发表于 2018-1-5 20:17 | 显示全部楼层
    为什么文章后面字体变成斜的了?

    该用户从未签到

    发表于 2018-1-8 09:33 | 显示全部楼层
    大佬呀,可不可以发一个电脑控制arduino LED点阵的实例来看看呀,尤其是通信协议这里?
  • TA的每日心情
    开心
    2019-3-3 21:12
  • 签到天数: 68 天

    [LV.6]常住居民II

     楼主| 发表于 2018-1-9 11:10 | 显示全部楼层
    云卷云舒 发表于 2018-1-8 09:33
    大佬呀,可不可以发一个电脑控制arduino LED点阵的实例来看看呀,尤其是通信协议这里? ...

    我是菜鸟 不是大佬

    该用户从未签到

    发表于 2018-3-29 14:08 | 显示全部楼层
    能发一下接线图吗?

    该用户从未签到

    发表于 2019-5-27 20:48 来自手机 | 显示全部楼层
    能不能把杜邦线换成一条两头都是USB的线连接呢?

    该用户从未签到

    发表于 2019-6-13 18:19 | 显示全部楼层
    请问一下。9600,能不能换为57600.区别是什么?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    开贴讲讲NRF24L01P,让你彻底搞懂它的工作原理,持续更...
    开贴讲讲NRF24L01P,让你
    *****************************************
    小白求助arduino源码如何使用
    小白求助arduino源码如何
    淘宝买了个六足机器人的源码 但是一打开就蒙了 完全看不懂啊,以前没接触过过arduino
    设计了一款智能加湿器,出现了一些控制上的问题
    设计了一款智能加湿器,出
    最近在学习blinker,就想着把手头的加湿器改装成智能加湿器,用了一块WiFiduino、一个
    有偿解答!!求大神带《指纹解锁杯》项目
    有偿解答!!求大神带《指
    想做一个职位解锁的杯子,通过指纹模块控制继电器锁头,从而控制杯子的锁死和开放的装
    【Arduino】37种传感器模块系列实验(29)---实时时钟模块
    【Arduino】37种传感器模
    37款传感器模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表