Я соединяю несколько модулей Arduino Mega вместе, чтобы создать банк ввода-вывода, полностью управляемый ведущим на шине I2C.
Я работал с подчиненным, заполняя строку с состоянием аналоговых входови т. д. каждый разделен двоеточием.Строка будет затем зациклена с Wire.write
.
Начальный reqNo
сообщит мастеру, какая партия возвращалась.Например, партия 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;
}
}