目的:
       实现Arduino主从设备之间的互相IIC通信,掌握IIC通信协议的使用方法。
器材:
Arduino UNO R3 一块
Arduino Nano 三块
面包板   导线
3K电阻 2个
连接方法:

    由于Arduino IIC接口总线没有上拉电阻,在连接布线时需要提供两个上拉电阻。
 
首先给出程序:
Master程序
   #include <Wire.h>
void setup() {
  Wire.begin(); // join i2cbus (主机,不用写IIC地址)
  Serial.begin(9600); // 串口输出
 }
 
int i = 1;
 
 void loop()
 {
     //向从机写入数据
     Wire.beginTransmission(2);
     Wire.write(i);
     Wire.endTransmission();
     //读数据
     Wire.requestFrom(2, 6); // 要求2号IIC设备,通过Wire传送 6个 char过来
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
     delay(2000); // 等2秒
     Serial.println( ); // 输出到下一行方便查看       
    
     //向从机写入数据
     Wire.beginTransmission(3);
     Wire.write(i);
     Wire.endTransmission();
     //读数据
     Wire.requestFrom(3, 6); // 要求2号IIC设备,通过Wire传送 6个 char过来
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
      delay(2000); // 等2秒
      Serial.println( ); // 输出到下一行方便查看           
   
     //向从机写入数据
     Wire.beginTransmission(4);
     Wire.write(i);
     Wire.endTransmission();
     //读数据
     Wire.requestFrom(4, 6); // 要求2号IIC设备,通过Wire传送 6个 char过来
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
      delay(2000); // 等2秒
      Serial.println( ); // 输出到下一行方便查看     
   
     i++;
     i = i%4;
 
 }// loop
 
 
SALVE程序
#include <Wire.h>
void ggyy();
//接收主机命令
int revData = 0;
void receiveData(int byteCount) {  
  while (Wire.available()) {
    int number = Wire.read();
    Serial.print("data received1: ");
    Serial.println(number);
    revData = number;
    } 
 
void setup()
{
  Wire.begin(3); //通知IIC总线, 是2 号IIC设备地址
  Wire.onReceive(receiveData);
  Wire.onRequest(ggyy); // 注册当收到主机信息时相应的调用函数ggyy( )
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
}
void loop()
{ // 从机,代码空
      int b = revData;
      revData = 0;
      for(int i = 0; i < b; i++){
      digitalWrite(13,HIGH);
      delay(200);
      digitalWrite(13,LOW);
      delay(200);
    }
}
// 信息处理函数,必须在 setup( ) 內用onRequest( ) 注册
void ggyy()
{
  Wire.write("World "); // 送出 6 个char给IC 上的主机
}
 
 
程序要点分析:
Master程序用Wire.begin();设置,表示本机为Master
  主机向从机写入数据格式
     Wire.beginTransmission(从机地址号);
     Wire.write(数据byte);
     Wire.endTransmission();
Master从Salve读数据
     Wire.requestFrom(从机地址, 字符个数);
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
SLAVE用Wire.begin(地址号)表示本机为SLAVE,并设置地址号
5.  注册用于接收和发送的函数
Wire.onReceive(receiveData);
     Wire.onRequest(sendData);
两个函数的格式:
void receiveData(int byteCount);
void sendData ();
 
当主机发出requestForm请求时,从机响应,开始发送数据

Arduino IIC 主从设备连接通信的更多相关文章

  1. STM32作为主设备,Arduino作为从设备进行IIC通讯的注意要点

    近日公司的项目重心要往米思齐的Arduino图形化编程上转移了,需要我将STM32和Arduino的IIC通讯调通.之前Arduino并没怎么使用过,仅仅是将超声波的代码移植成TOF激光测距而已.网上 ...

  2. 基于HTML5的Web跨设备超声波通信方案

    前言:Chirp在iPhone上掀起了有声传输文件的序幕,我们再也不需要彩信.蓝牙配对.IM来传送数据.它通过“叽叽喳喳”的小鸟叫声来分享数据,简单有趣,而且可以快速的实现一对多的分享. 此外支付宝曾 ...

  3. USB协议-检测设备连接与速度

    在USB设备连接时,USB系统能自动检测到这个连接,并识别出其采用的数据传输速率.USB采用在D+或D-线上增加上拉电阻的方法来识别低速和全速设备. USB支持3种类型的传输速率:1.5Mb/s的低速 ...

  4. android usb Host模式下与usb Hid 设备的通信

    做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ...

  5. Niagara解决设备连接应用的软件框架平台技术。

    Niagara 是Tridium公司所研发的设计用于解决设备连接应用的软件框架平台技术. Niagara是一种应用框架,或者说是软件框架,特别设计用于应对智能设备所带来的各种挑战,包括设备连接到企业级 ...

  6. Android和BLE模块连接通信

    首先,进行一下科普: 1.BLE(Bluetooth Low Energy),蓝牙4.0核心profile,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输,缺点:数据传输速率低,由于其具有低 ...

  7. 理解主从设备模式(Master-Slave)

    前言 在给定上下文的软件体系结构中,为了解决某些经常出现的问题而形成的通用且可重用的解决方案称之为架构模式,而常见的体系架构模式主要有以下十种 分层模式 客户端-服务器模式 主从设备模式 管道-过滤器 ...

  8. Android BLE设备蓝牙通信框架BluetoothKit

    BluetoothKit是一款功能强大的Android蓝牙通信框架,支持低功耗蓝牙设备的连接通信.蓝牙广播扫描及Beacon解析. 关于该项目的详细文档请关注:https://github.com/d ...

  9. C++服务器设计(六):设备连接的生命周期管理

    生命周期介绍 每一个服务器系统的新连接从建立开始时,均会经历多个阶段.比如连接的建立,登录的验证,退出前的资源释放等.同时在具体的消息处理中,还会遇到不可识别的消息事件,或者消息处理时出现数据错误等. ...

随机推荐

  1. 洛谷 P4391 [BOI2009]Radio Transmission 无线传输

    题目传送门 解题思路: 本题所要求的循环节,其实就是最长公共前缀的前缀长度减去前后缀重叠的一部分 AC代码: #include<iostream> #include<cstdio&g ...

  2. css滚动

    css 滚动transform: translateY(-100px);jquery $(box).height(); //获取元素高度$(box).scrollTop();//获得元素的滚动条高度

  3. yum 安装 tomcat

    前言对于一个新安装的 centos 系统来说,是没有 tomcat 服务器的.用下面的命令可以查看 tomcat 服务的状态. systemctl status tomcat.service//或者 ...

  4. JuJu团队12月4号工作汇报

    JuJu团队12月4号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 调试 无 无 婷婷 和陈灿一起提升acc 无 无 恩升 纠正chunk evaluator 无 无 ...

  5. Prime Ring Problem素数环(HDU1016)

    Prime Ring Problem 思路:先看成一条链,往里头填数,满足任意相邻两数和为质数(这可以打表预处理出40以内的所有质数,扩展的时候枚举),填完了后检查首尾是否满足条件.字典序可以采用扩展 ...

  6. P1044 火星数字

    P1044 火星数字 转跳点:

  7. decodeURIComponent 测试

    var test1="http://www.wljcz.com/My first/"; var nn=encodeURI(test1); var now=decodeURI(tes ...

  8. 我学到的treap

    到目前为止,平衡树应该是我学过的数据结构里面最难的一个了.(顺便贴上一个我认为treap讲解的比较好的博客https://blog.csdn.net/u014634338/article/detail ...

  9. JAXB工具

    在JDK6之后,都自带了JAXB工具,所以在jdk类库与tomcat WEBAPP类库之间,会造成冲突 https://blog.csdn.net/iteye_13776/article/detail ...

  10. PL/SQL表结构/数据的导出

    1.表结构导出 方法一:在sql页面点击表名,进入表编辑页面,点击右下角“查看SQL”按钮,即可看到表结构 方法二:工具--导出用户对象 去掉所有者勾选项,即***.表名:用户名字在其他用户导入数据库 ...