Показано с 1 по 4 из 4
  1. #1
    Пользователь
    Регистрация
    12.07.2010
    Возраст
    42
    Сообщений
    20
    Вес репутации
    174

    По умолчанию Вопрос по Ардуино. Хелп плиз-((

    Плата: фридуино на 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 
    1pinMode(pinINPUT); break;
                               case 
    2pinMode(pinOUTPUT); break;
                               case 
    3digitalWrite(pin,cmd[5]);break;
                               case 
    4analogWrite(pin,cmd[5]);break;
                             }  

                       };
                   break;
           }
        }
     



  2. #2
    Пользователь
    Регистрация
    12.07.2010
    Возраст
    42
    Сообщений
    20
    Вес репутации
    174

    По умолчанию Re: Вопрос по Ардуино. Хелп плиз-((

    Прикол в том, что если я в цикл считывания с порта вставляю дополнительное Serial.print() то массив читается идеально и программа работает швейцарские часы, если эту строчку закомментировать, то программа не работает.
    Почему так? Кто с таким сталкивался?

  3. #3
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Вопрос по Ардуино. Хелп плиз-((

    Предлагаю попробовать для передачи массива использовать Serial.write(cmd, 64)
    Последний раз редактировалось Chip; 13.07.2010 в 03:40.

  4. #4
    Пользователь
    Регистрация
    12.07.2010
    Возраст
    42
    Сообщений
    20
    Вес репутации
    174

    По умолчанию Re: Вопрос по Ардуино. Хелп плиз-((

    Цитата Сообщение от Chip Посмотреть сообщение
    Предлагаю попробовать для передачи массива использовать Serial.write(cmd, 64)
    Передачи массива куда? В ардуино?

    Вообще как выяснилось, Serial.print() тупо обеспечивает задержку при считывании с порта, тот же самый эффект дала задержка на 1мс delay(1).

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •