两个arduino UNO 使用iic/i2c通讯,发送和接收字符串

连接方法:两个arduino UNO analog引脚A4,A5对应互联 ,并把两个板GND引脚互联(共地)。

程序实例功能介绍:主机端向从机端发送字符串"Hello",从机接收后向主机发送"Hello, World!"。

程序内容:主机端

#include <Wire.h>
#define MAX_STR_LEN 256           // 设置最大字符串长度

const int I2C_SLAVE_ADDRESS = 2;  // 设置从设备地址为2,可根据实际情况进行修改

void setup() {
  Wire.begin();                   // 加入 I2C 总线
  Serial.begin(9600);             // 开始串口通信,波特率为 9600
}

void loop() {
  String receivedString = "";     // 初始化接收到的字符串

  // 从 I2C 总线接收数据
  Wire.beginTransmission(I2C_SLAVE_ADDRESS);     // 开始向 I2C 从设备发送数据
  Wire.write("Hello");            // 发送一个字符串作为请求
  Wire.endTransmission();         // 结束传输

  delay(1000);                    // 等待一段时间,以等待从设备响应

  // 检查从设备是否响应
  if (Wire.available() > 0) {
    receivedString = Wire.readStringUntil('\0'); 
                                  // 从 I2C 总线读取响应字符串,直到遇到 null 字符为止
  }

  Serial.println("Received:");
  Serial.println(receivedString); // 打印接收到的字符串

  delay(5000);                    // 延迟一段时间,以等待下一次传输
}

从机端

#include <Wire.h>
#define MAX_STR_LEN 256               // 设置最大字符串长度

const int I2C_SLAVE_ADDRESS = 2;      // 设置从设备地址为2,可根据实际情况进行修改

void setup() {
  Wire.begin(I2C_SLAVE_ADDRESS);      // 加入 I2C 总线,并指定从设备地址
}

void loop() {
  String receivedString = "";         // 初始化接收到的字符串

  // 检查是否有数据可用
  if (Wire.available() > 0) {
    receivedString = Wire.readStringUntil('\0'); 
                                      // 从 I2C 总线读取数据,直到遇到 null 字符为止
  }

  delay(1000);                        // 等待一段时间,以等待主机发送数据

  // 如果收到字符串请求,则发送响应字符串
  if (receivedString == "Hello") {
    Wire.beginTransmission(I2C_SLAVE_ADDRESS); // 开始向 I2C 主设备发送数据
    Wire.write("Hello, World!");      // 发送响应字符串
    Wire.endTransmission();           // 结束传输
  }
}

以上实例程序 发送和接收语句都在主程序内调用,从机端 可以不在主程序内调用 而是在初始化阶段调用。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值