Пишу программку общения с ком-портом.
Суть - в порт передаются команды типа ATS12345
Программка их парсит побайтно и в зависимости от команды выполняет те или иные действия.
Уперся я о непонятный камень:
код работает нестабильно.
в случае кода, написанного ниже - все работает идеально.
но, стоит закомментировать строку Serial.print(loopc,DEC);
как работоспособность кода полностью ломается - будто массив заполняется криво.
В чем может быть трабл? Уже идей никаких нет.
- Код: Выделить всё • Развернуть
int loopc;
void setup()
{
Serial.begin(115200);
// Serial.println("ECU READY");
loopc=0;
}
int cmd[64];
int i;
int pin;
int maxdata;
void loop()
{
maxdata=0;
loopc++;
for(i=0;i<64;i++) {cmd[i]=0;}
i=0;
while (Serial.available()>0)
{
cmd[i]=Serial.read();
Serial.print(cmd[i],BYTE);
Serial.print(loopc,DEC);
i++;
maxdata++;
}
// Serial.flush();
if ((cmd[0]==65)and(cmd[1]==84))
{
Serial.println("\r\n");
Serial.println("AT OK");
switch (cmd[2])
{
case 73: { //'I'
};
break;
case 71: { //'G'
pin=cmd[3];
};
break;
case 83: { //'S'
Serial.println("SET COMMAND /PIN ");
pin=cmd[3];
// Serial.println(pin,BYTE);
// Serial.println(cmd[4],BYTE);
switch (cmd[4])
{
case 1: pinMode(pin, INPUT); break;
case 2: pinMode(pin, OUTPUT); break;
case 3: digitalWrite(pin,cmd[5]);break;
case 4: analogWrite(pin,cmd[5]);break;
};
Serial.println("\r\n");
};
break;
}
}
}
в монитор порта вбиваю несколько раз одну и ту же строку ATSQWERTY
Результат работы
A-9008T-9008S-9008Q-9008W-9008E-9008R-9008T-9008Y-9008
AT OK
SET COMMAND /PIN
A23933T23933S23933Q23933W23933E23933R23933T23933Y23933
AT OK
SET COMMAND /PIN
A-26026T-26026S-26026Q-26026W-26026E-26026R-26026T-26026Y-26026
AT OK
SET COMMAND /PIN
A-11042T-11042S-11042Q-11042W-11042E-11042R-11042T-11042Y-11042
AT OK
SET COMMAND /PIN
A3653T3653S3653Q3653W3653E3653R3653T3653Y3653
AT OK
SET COMMAND /PIN
A17269T17269S17269Q17269W17269E17269R17269T17269Y1 7269
AT OK
SET COMMAND /PIN
A32459T32459S32459Q32459W32459E32459R32459T32459Y3 2459
AT OK
SET COMMAND /PIN
и результат работы с закомментированным b]Serial.print(loopc,DEC);[/b]
ATSQWERTYAT
AT OK
SQWERTYATSQWERTYATS
AT OK
SET COMMAND /PIN
QWERTYAT
AT OK
SQWERTYATSQWERTYAT
AT OK
SQWERTYAT
AT OK
SQWERTY
В чем может быть трабл?
Ведь чтение порта никак не зависит от вывода в порт!
Куда копать? Кто с таким сталкивался?