【发布时间】: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()。嗯?
标签: string arduino communication i2c led