roboforum.ru

Технический форум по робототехнике.

Вопрос по Ардуино. Нестабильный глюк. Хелп плиз!

Вопрос по Ардуино. Нестабильный глюк. Хелп плиз!

CyberSubaru » 12 июл 2010, 16:29

Плата: фридуино на 168й меге.
Пишу программку общения с ком-портом.
Суть - в порт передаются команды типа 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


В чем может быть трабл?
Ведь чтение порта никак не зависит от вывода в порт!
Куда копать? Кто с таким сталкивался?

Re: Вопрос по Ардуино. Нестабильный глюк. Хелп плиз!

avr123.nm.ru » 12 июл 2010, 16:53

Наверно надо посмотреть с вимуляторе как что происходит.

Re: Вопрос по Ардуино. Нестабильный глюк. Хелп плиз!

CyberSubaru » 12 июл 2010, 16:55

не знаю что там происходит -) но помогла банальная задержка на 1мс вместо serial.print
реально времени убил....первая дуина-))))

но все же - это особенность такая? или глюк?

Re: Вопрос по Ардуино. Нестабильный глюк. Хелп плиз!

RealRobot » 13 июл 2010, 08:39

когда я делал управление сервой в среде Ардуино тоже столкнулся с глюком. Плюнул на среду, и сделал прошивку в CVAvr. Глючная она среда то, что-нибудь "серьезное" на ней не получиться сделать.


cron
Rambler\'s Top100 Mail.ru counter