Страница 21 из 44 ПерваяПервая ... 111516171819202122232425262731 ... ПоследняяПоследняя
Показано с 201 по 210 из 435
  1. #201
    Продвинутый
    Регистрация
    20.05.2011
    Сообщений
    325
    Вес репутации
    225

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

    Ок. Завтра буду пробовать.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Chip, с подправленным кодом тоже никакой реакции. Я все смотрю на этот скетч - http://www.compcar.ru/forum/showpost...&postcount=173 (где управление на 4 устройства) и не пойму, почему он воспринимает только #a1b1c1d1 и никак не получается его разделить на #a1 или #b1 или #c1 или #d1... Вроде бы как "на вид" все прсто, но ничего не работает...
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Цитата Сообщение от metaforos Посмотреть сообщение
    Я все смотрю на этот скетч - http://www.compcar.ru/forum/showpost...&postcount=173 (где управление на 4 устройства) и не пойму, почему он воспринимает только #а1b1c1d1 и никак не получается его разделить на #a1 или #b1 или #c1 или #d1... Вроде бы как "на вид" все прсто, но ничего не работает...
    Все просто , в этом скетче да и во всех остальных, СМС попадает в сериал буфер всего один раз и при чтении из буфера с помощью serial.read данные из этого буфера удаляются. Ты сначала читаешь и удаляешь а1 потом b1
    и так далее. После удаления обработки пришедшей СМС, новая СМС в буфер не попадет ни как, потому что в цикле она нигде не читается
    Последний раз редактировалось Chip; 08.03.2012 в 11:19.

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

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

    Попробуй еще 1 вариант кода посылать СМС нужно двумя байтами а1 или с0, тоесть без знака #
    Я так понимаю что ты в курсе что СМС посылать нужно не раньше чем через 30сек. после запуска скетча?
    PHP код:
     #define led1 10 
      #define led2 11 
      #define led3 12 
      #define led4 13 
      
    char instring[3];  
            
      
    void setup()      
      {      
        for(
    byte i=10i<14i++) pinMode(iOUTPUT);            
        
    Serial1.begin(9600);      
        
    delay(30000);       
        
    Serial1.println("AT+CMGF=1\r");       
        
    delay(200);         
      }      
            
      
    void loop()       
      {  
       
    Serial1.println("AT+CNMI=3,0,0,0\r"); 
       
    delay(300);     
       
    sms_read();  
       
    delay(1000);     
      }      

    void sms_read()   
    {      
     if(
    Serial1.available() >1)      
     {    
       for(
    byte i=0i<2i++) instring[i]=Serial1.read(); 
       
      switch (
    instring[0]) 
      {
        case 
    'a'digitalWrite(led1, (instring[1]-48));
          break;
        case 
    'b'digitalWrite(led2, (instring[1]-48)); 
          break;
        case 
    'c'digitalWrite(led3, (instring[1]-48)); 
          break;
        case 
    'd'digitalWrite(led4, (instring[1]-48)); 
          break;  
        default: 
    Serial1.flush();  
      }
       
    Serial1.println("AT+CMGD=1,4\r");      
     }     

    Последний раз редактировалось Chip; 08.03.2012 в 12:07.

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

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

    Не работает. Почему (instring[1]-48), т.е. что означает -48?
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Возможно что то ты делаешь не так.
    А для чего ты сделал пауза 30сек?
    Можно попробовать убрать строку с обнулением всех СМС
    Последний раз редактировалось Chip; 08.03.2012 в 15:52.

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

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

    Пауза в 30 секунд, для того, чтобы шилд успел зарегистрироваться в сети. Когда эксперементирую, я ее вообще убираю и ориентируюсь по светодиоду на шилде. А если не удалять СМС, они сохраняются и Ардуина обрабатывает самое первое СМС, а остальные игнорирует.

    Т.е с командой "AT+CNMI=3,0,0,0\r" сообщения видны в таком формате:

    +СMT: "номер телефона отправителя","номер центра СМС","дата, время", длина СМС
    Текст СМС

    Если не удалять, получается:

    +СMT: "номер телефона отправителя","номер центра СМС","дата, время", длина СМС
    Текст СМС
    +СMT: "номер телефона отправителя","номер центра СМС","дата, время", длина СМС
    Текст СМС
    +СMT: "номер телефона отправителя","номер центра СМС","дата, время", длина СМС
    Текст СМС
    +СMT: "номер телефона отправителя","номер центра СМС","дата, время", длина СМС
    Текст СМС
    и т.д.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Ну так если в таком формате СМС получаем, то их нужно принимать совсем по другому
    Попробуй вот такой код
    Формат СМС #a1

    PHP код:
     #define led1 10 
      #define led2 11 
      #define led3 12 
      #define led4 13 
      
    char device,on_off;  
            
      
    void setup()      
      {      
        for(
    byte i=10i<14i++) pinMode(iOUTPUT);            
        
    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()       
      {       
       
    sms_read();       
      }      

    void sms_read()   
    {      
     if(
    Serial1.available()>2)      
     {    
       if(
    Serial1.read()=='#')
        {       
           
    device=Serial1.read();
           
    on_off=Serial1.read();
           switch (
    device
            {
              case 
    'a'digitalWrite(led1on_off-48);
                break;
              case 
    'b'digitalWrite(led2on_off-48); 
                break;
              case 
    'c'digitalWrite(led3on_off-48); 
                break;
              case 
    'd'digitalWrite(led4on_off-48); 
                break; 
            }  
         
    Serial1.println("AT+CMGD=1,4\r");
         
    Serial1.flush();  
        }        
     }     

    Последний раз редактировалось Chip; 08.03.2012 в 16:46.

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

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

    Теперь все работает отлично. Только объясни пожалуйста, почему вместо int led, ты используешь #define led1 и что такое -48. Также, мне не совсем понятна Serial1.flush();
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    int led занимает в оперативной памяти место 2 байта
    #define led1 это указание компилятору чтобы он везде где встретит led1 заменит его на 10
    -48 это преобразование из типа Char в тип Byte
    Serial1.flush() очищает сериал буфер
    Последний раз редактировалось Chip; 09.03.2012 в 12:12.

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

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

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

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

Ваши права

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