Плата: фридуино на 168й меге.
Пишу программку общения с ком-портом.
Суть - в порт передаются команды типа ATS12345
Программка их парсит побайтно и в зависимости от команды выполняет те или иные действия.
Уперся я о непонятный камень:
код работает нестабильно.
в монитор порта вбиваю ATS
в 50% случаев (примерно)
код доходит до выполнения Serial.println("SET COMMAND /PIN ");
НО(!!!!)
Стабильно в цикле забивания массива выводит именно те байты, что передавались. Но if и switch работают по-китайски.
И еще нюанс такой: Serial.print как-то больше способствует корректной работе кода с массивом.
В чем может быть трабл? Уже идей никаких нет.
PHP код:
void setup()
{
Serial.begin(115200);
// Serial.println("ECU READY");
}
int cmd[64];
int i;
int pin;
int maxdata;
void loop()
{
maxdata=0;
for(i=0;i<64;i++) {cmd[i]=0;}
i=0;
while (Serial.available()>0)
{
cmd[i]=Serial.read();
Serial.print(cmd[i],BYTE);
i++;
maxdata++;
}
if ((cmd[0]==65)and(cmd[1]==84))
{
// 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;
}
};
break;
}
}
}