在两个 arduino 微控制器上使用 i2c 通信发送字符串

Posted

技术标签:

【中文标题】在两个 arduino 微控制器上使用 i2c 通信发送字符串【英文标题】:Sending string using i2c commuication on two arduino micro-controller 【发布时间】:2015-08-14 20:36:52 【问题描述】:

我正在使用两个 arduino 单片机连接两行 LED 矩阵显示器。我尝试使用 i2c 通信连接主 mcu(控制 LED 矩阵显示器的第一行)和从 mcu(控制 LED 矩阵显示器的第二行)。我需要将一个字符串数据(由 300 个字符组成)从主机传递到从机,以便我可以在 LED 矩阵显示器的第二行显示相同的字符串。

问题是,我无法使用 Wire.read() 将字符串变量从主机传递到从机。我对此的解决方案是在使用 wire.read() 传输数据之前将字符串转换为字符,但从机无法接收整个字符串,只能接收前几个字符。我的显示时序也有问题,LED矩阵的第二行(由从机控制)显示字符串很晚。

这是主控单片机的示例代码

//Master Code

String inData;
String LED_DATA;
char buf[300];
void Input(void) 
while(Serial.available() > 0)
 

 char received = Serial.read();
 inData+=received;

 if(received == '~')
 

     LED_DATA = inData; 
     inData.toCharArray(buf,300);   

     Wire.beginTransmission(5);
     Wire.write(buf);
     Wire.endTransmission(); 






这是从站的示例代码

//slave

char LED_DATA[100];

void setup()        
Wire.begin(5);
Wire.onReceive(receiveEvent);


void receiveEvent(int howMany)
 while(Wire.available()) 
 LED_DATA[300] = Wire.read();
 

我是 arduino 和微控制器的新手。解决我的问题的最简单方法是什么?非常感谢。

【问题讨论】:

你还没有说明你的问题是什么! 问题是,我不能使用 Wire.read() 将字符串变量从主机传递到从机。我对此的解决方案是在使用 wire.read() 传输数据之前将字符串转换为字符,但从机无法接收整个字符串,只能接收前几个字符。我的显示时序也有问题,LED矩阵的第二行(由从机控制)显示字符串很晚。 @jbanimated10,slave 的代码看起来很奇怪。当您在主代码中定义 300 时,字符数组 LED_DATA 的大小错误。而LED_DATA[300] = Wire.read() 这是错误的。也许你想做的LED_DATA[i++] = Wire.read()。嗯? 【参考方案1】:

您可以将字符串传递给 Wire.write(),方法是将变量作为 char * 传递。所以如果 String a = "test";是较早的声明,请尝试使用 Char* a = "test";它将通过发送数据

【讨论】:

以上是关于在两个 arduino 微控制器上使用 i2c 通信发送字符串的主要内容,如果未能解决你的问题,请参考以下文章

LPC2138微控制器之I2C

如何将 Android 应用程序正确连接到支持蓝牙的 Arduino 微控制器上的 RFCOMM 插座?

有没有办法处理 AVR/Arduino 微控制器中的堆内存碎片?

Linux / Windows Arduino IDE 上的 avr-gcc Atmel AVR 微控制器

在类似于 Arduino 的 AVR 微控制器中实现引脚编号

Arduino Uno微控制器采用的是Atmel的ATmega328