Страница 18 из 44 ПерваяПервая ... 81213141516171819202122232428 ... ПоследняяПоследняя
Показано с 171 по 180 из 435
  1. #171
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    227

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Chip, попробовал переделать скетч с использованием switch.. case.., посмотрел синтаксис,не согу понять, что куда менять. Если не сложно, напиши как его переделать. (Для удобства, уменьшил до 1 устройства) :

    PHP код:
      char inchar;                
      
    int led1 10;
        
      
    void setup()
      {
        
        
    pinMode(led1OUTPUT);
        
    digitalWrite(led1LOW);
        
    Serial1.begin(9600);
        
    delay(30000); 
        
    Serial1.println("AT+CMGF=1\r"); 
        
    delay(200);
        
    Serial1.println("AT+CNMI=3,0,0,0\r"); 
        
    delay(200);
      }
      
      
    void loop() 
      {
        
        if(
    Serial1.available() >0)
        {
          
    inchar=Serial1.read();    
          if (
    inchar=='#')
          {
            
    delay(10);
            
    inchar=Serial1.read();  
            if (
    inchar=='a')
            {
              
    delay(10);
              
    inchar=Serial1.read();
              if (
    inchar=='0')
              {
                
    digitalWrite(led1LOW);
              } 
              else if (
    inchar=='1')
              {
                
    digitalWrite(led1HIGH);
              }
              
    delay(10);
            
              
    Serial1.println("AT+CMGD=1,4\r");
              }
            }
        }
      } 
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Пример
    PHP код:
    char inchar='1';

    void setup()
    {
      
    Serial.begin(115200);
    }

    void loop()
    {
      switch (
    inchar
      {
        case 
    '1':Serial.println("one");
          break;
          
        case 
    '2':Serial.println("two");
          break;
           
        case 
    '3':Serial.println("three");
          break;
         
        default:
    Serial.println("nothing");

      }
    delay(1000);             

    Последний раз редактировалось Chip; 05.03.2012 в 17:06.

  3. #173
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    227

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Chip, ни чего у меня не получилось со switch... case...

    В принципе все понятно, но на моем скетче, запутался в край, тем более, если управлять несколькими устройствами...

    Ну да ладно, с трудночитаемостью кода, буду позже разбираться.
    Сечас, возникла проблема.
    В данном - в скетче:

    PHP код:
      
      char inchar
    ;               
      
    int led1 10;
      
    int led2 11;
      
    int led3 12;
      
    int led4 13;
      
      
    void setup()
      {
        
        
    pinMode(led1OUTPUT);
        
    pinMode(led2OUTPUT);
        
    pinMode(led3OUTPUT);
        
    pinMode(led4OUTPUT);
        
    digitalWrite(led1LOW);
        
    digitalWrite(led2LOW);
        
    digitalWrite(led3LOW);
        
    digitalWrite(led4LOW);
        
        
    Serial1.begin(9600); 
        
    delay(30000); 
        
    Serial1.println("AT+CMGF=1\r");
        
    delay(200);
        
    Serial1.println("AT+CNMI=3,0,0,0\r"); 
        
    delay(200);
      }
      
      
    void loop() 
      {
        
        if(
    Serial1.available() >0)
        {
          
    inchar=Serial1.read();    
          if (
    inchar=='#')
          {
            
    delay(10);
            
    inchar=Serial1.read();  
            if (
    inchar=='a')
            {
              
    delay(10);
              
    inchar=Serial1.read();
              if (
    inchar=='0')
              {
                
    digitalWrite(led1LOW);
              } 
              else if (
    inchar=='1')
              {
                
    digitalWrite(led1HIGH);
              }
              
    delay(10);
              
    inchar=Serial1.read();  
              if (
    inchar=='b')
              {
                  
    inchar=Serial1.read();
                if (
    inchar=='0')
                {
                  
    digitalWrite(led2LOW);
                } 
                else if (
    inchar=='1')
                {
                  
    digitalWrite(led2HIGH);
                }
                
    delay(10);
                
    inchar=Serial1.read();  
                if (
    inchar=='c')
                {
                    
    inchar=Serial1.read();
                  if (
    inchar=='0')
                  {
                    
    digitalWrite(led3LOW);
                  } 
                  else if (
    inchar=='1')
                  {
                    
    digitalWrite(led3HIGH);
                  }
                  
    delay(10);
                  
    inchar=Serial1.read();  
                  if (
    inchar=='d')
                  {
                    
    delay(10);
                    
    inchar=Serial1.read();
                    if (
    inchar=='0')
                    {
                      
    digitalWrite(led4LOW);
                    } 
                    else if (
    inchar=='1')
                    {
                      
    digitalWrite(led4HIGH);
                    }
                    
    delay(10);
                  }
                }
                
    Serial1.println("AT+CMGD=1,4\r"); 
              }
            }
          }
        }
      } 
    можно управлять 4-мя устройствами, но синтаксис СМС должен быть - #abcd, т.е. что бы ОДНО устройство включить или выключить, нужно писать всю строку (#a0b0c1d0), что не очень удобно. Решил сделать скетч, чтобы можно было писать просто - #d1 например и все (минуя a,b,c)

    Однако не получилось. Решил сделать так :

    PHP код:

      char inchar
    ;                
      
    int led1 10;
      
    int led2 11;
         
      
    void setup()
      {
        
        
    pinMode(led1OUTPUT);
        
    pinMode(led2OUTPUT);
        
    digitalWrite(led1LOW);
        
    digitalWrite(led2LOW);
        
    Serial1.begin(9600);
        
    delay(30000); 
        
    Serial1.println("AT+CMGF=1\r"); 
        
    delay(200);
        
    Serial1.println("AT+CNMI=3,0,0,0\r"); 
        
    delay(200);
      }
      
      
    void loop() 
      {
       
    device_1();
       
    device_2(); 
      }

    void device_1()

    {
    if(
    Serial1.available() >0)
        {
          
    inchar=Serial1.read();    
          if (
    inchar=='#')
          {
            
    delay(10);
            
    inchar=Serial1.read();  
            if (
    inchar=='a')
            {
              
    delay(10);
              
    inchar=Serial1.read();
              if (
    inchar=='0')
              {
                
    digitalWrite(led1LOW);
              } 
              else if (
    inchar=='1')
              {
                
    digitalWrite(led1HIGH);
              }
              
    delay(10);
            
              
    Serial1.println("AT+CMGD=1,4\r");
              }
            }
        }
    }

    void device_2()
    {
    if(
    Serial1.available() >0)
        {
          
    inchar=Serial1.read();    
          if (
    inchar=='#')
          {
            
    delay(10);
            
    inchar=Serial1.read();  
            if (
    inchar=='b')
            {
              
    delay(10);
              
    inchar=Serial1.read();
              if (
    inchar=='0')
              {
                
    digitalWrite(led2LOW);
              } 
              else if (
    inchar=='1')
              {
                
    digitalWrite(led2HIGH);
              }
              
    delay(10);
            
              
    Serial1.println("AT+CMGD=1,4\r");
              }
            }
        }

    Вроде бы должно все работать, но включается-выключается только 1 устройство. Т.е. - отправляю #a1 - led1 включается, потом отправляю #b1 - никакой реакции, пока не отключу #a0. В чем может быть проблема?
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Сначала исправь ошибку
    if(Serial1.available() >0)
    1 байт это тоже больше нуля, нужно указывать конкретное значение , а например если в буфер пришло только 2 байта , а ты берешь из буфера 4 байта
    если пакет из 4-х байт то и указывать нужно if(Serial1.available() >3)

  5. #175
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    227

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Мне приходит 3 байта (#a1), значит указывать >2? А как же тогда - #a1b1c1d1 - 11 байт и работает с ">0"? Или мне на каждом void device_N указывать по +1?
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    значит указывать >2
    А про +1 я не понял

  7. #177
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    227

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Я имел ввиду, для void device_1 (>2), для void device_2 (>3) и т.д.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Почему >3 ? Там тоже 3 байта

  9. #179
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    227

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    С >2 вообще не работает. Ведь мой скетч принимает по 1 байту, т.е. вначале ждет 1 байт #, потом 1 байт а или b, затем 1 байт 0 или 1
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

  10. #180
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    227

    По умолчанию Re: Управление внешними устройствами с Arduino при помощи СМС

    Работает с моим скетчем и при >0, НО!!! Первую СМС воспринимает нормально (включает led2). Отправляю 2-ю СМС на включение led1 - не включает. Отправляю еще раз - включает. Отправляю СМС на отключение led2 - не отключает. Дублирую, - отключает. Последняя СМС на отключение led1 - работает сразу.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

Страница 18 из 44 ПерваяПервая ... 81213141516171819202122232428 ... ПоследняяПоследняя

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

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

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

Ваши права

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