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

时间:2015-06-01 11:41:44

标签: string arduino communication i2c led

我正在使用两个arduino mcu连接两行LED矩阵显示器。我尝试使用i2c通信来连接主设备(控制LED矩阵显示器的第一行)和从设备(控制第二行LED矩阵显示器)。我需要将一个字符串数据(由300个字符组成)从主服务器传递给从服务器,这样我就可以在LED矩阵显示器的第二行显示相同的字符串。

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

这是master mcu的示例代码

//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和微控制器的新手。解决问题的最简单方法是什么?非常感谢你。

1 个答案:

答案 0 :(得分:0)

通过将变量作为char *传递,可以将字符串传递给Wire.write()。所以如果String a =" test&#34 ;;是早先的声明,尝试使用Char * a =" test&#34 ;;它将通过

发送数据