【发布时间】:2018-12-28 09:39:14
【问题描述】:
我将多个 Arduino Mega 单元连接在一起以创建一组 IO,所有这些 IO 均由 I2C 总线上的主控器控制。
我让它与从机一起使用模拟输入等的状态填充一个字符串,每个用冒号分隔。然后将使用Wire.write 循环该字符串。
最初的reqNo 会告诉master 哪个批次被退回。例如。第 0 批是模拟 0 - 5,第 1 批是模拟 6 - 11 等等。
一切正常,直到进一步阅读使我看到一篇文章,由于内存使用和相关问题而提倡反对使用字符串。我试图重构我的代码以避免使用字符串,但是现在我得到这样的字符串:
:⸮:⸮:⸮:⸮:⸮:⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮W
返回而不是我的预期输出。
我认为这是编码问题或类似问题?任何人都可以就我做错了什么或实现这一目标的其他方式提供建议。设备可以长时间运行而不会重新启动或任何问题非常重要,这就是为什么我非常热衷于删除字符串,如果这可能会导致问题。
主码:
int i=0;
char res[32]="";
while(Wire.available()){
char c=Wire.read();
Serial.print(c);
res[i]=c;
i++;
}
从机代码:
void requestStatus(){
int i;
Wire.write(reqNo);
if(reqNo==0){
for(i=0;i<6;i++){
Wire.write(':');
Wire.write(analogRead(i));
}
}else if(reqNo==1){
for(i=6;i<12;i++){
Wire.write(':');
Wire.write(analogRead(i));
}
}else if(reqNo==2){
for(i=12;i<16;i++){
Wire.write(':');
Wire.write(analogRead(i));
}
}
reqNo++;
if(reqNo==3){
reqNo=0;
}
}
【问题讨论】:
-
你没有在代码的任何地方使用
res,请提供完整的例子。
标签: c++ arduino arduino-ide