查看: 14065|回复: 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.区别是什么?
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    HDC1080+TEMT6000采集温湿度及亮度数据
    HDC1080+TEMT6000采集温湿
    wifiduino上的A0因为接了电阻,所以并不是很准,这里仅用于采集亮度变化。如果你需要
    基于机器视觉的智能分拣机械臂
    基于机器视觉的智能分拣机
    本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
    【Arduino】108种传感器模块系列实验(122)---micro:bit 开发板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    (开源)ESP8266改装小风扇,app远程控制+天猫精灵控制
    (开源)ESP8266改装小风
    材料准备 [*]USB风扇一个 [*]ESP8266一块 [*]3.3继电器一块 拆解风扇 第一次,没有
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表