Страница 33 из 43 ПерваяПервая ... 2327282930313233343536373839 ... ПоследняяПоследняя
Показано с 321 по 330 из 435

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Новичок
    Регистрация
    29.03.2012
    Возраст
    38
    Сообщений
    9
    Вес репутации
    165

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

    Сделал удобную отправку смс через Serial Monitor. Теперь задаем номер телефона и текст сообщения одной строкой.
    На скриншоте:
    1) Служебная метка sms
    2) Номер мобильника в формате pdu
    3) Текст сообщения
    Синтаксис с запятыми обязательно соблюдать.

    PHP код:
    #include <NewSoftSerial.h>
    #include <string.h>

    NewSoftSerial mySerial(23);

    #define num_to_char(number)   ((number) < 10 ?                           \
                                                   
    ('0' + (number)) :        \
                                                   ((
    'A' 10) + (number)) )

    #define first_four(byte)       (0x0F & (byte))
    #define  last_four(byte)      ((0xF0 & (byte)) >> 4)
    #define hexdump_a(byte)  num_to_char( last_four(byte))
    #define hexdump_b(byte)  num_to_char(first_four(byte))

    char inData[100];

    char unitID_in[10];
    char telnumb_in[14];
    char textsms_in[100];
    //String textsms_in;
    void setup()  
    {
      
    Serial.begin(9600);
      
    Serial.println("Go SMS Send");
      
    mySerial.begin(9600);
    }

    void loop() 

     
    int i=0
     
    char buffer[100];
    //если есть данные - читаем
      
    if(Serial.available()){
         
    delay(100);      
         
    //загоняем прочитанное в буфер
         
    while( Serial.available() && i99) {
            
    buffer[i++] = Serial.read();
         }
         
    //закрываем массив
         
    buffer[i++]='\0';
      } 
    //если буфер наполнен отправляем смс
      
    if(i>0){ 
        
    //разбераем буфер на части отделенные запятой
        
    sscanf(buffer"%[^','],%[^','],%[^',']", &unitID_in, &telnumb_in, &textsms_in);
       
        if ((String)
    unitID_in == "sms"){  //определяем команду отправки смс    
        //Serial.println(buffer); 
        
    char *indata=textsms_in;
       
    // Serial.println(textsms_in);
       // Serial.println(telnumb_in);
        
    send_sms(indata);          
        
    unitID_in [0] = '\0';
        
    telnumb_in [0] = '\0';           
        }     
      }
    }

    void send_sms(char *data)
    {
      
    size_t data_lengthx;
      
    char cl;
      
    long i;
      
    long n;
      
    data_length strlen(data);
      
    data_length 7;
      if (
    0x07= (& ~0x07) + 0x08;
      
    8
      
    mySerial.println("AT+CMGF=0");
      
    delay(50);
      
    mySerial.print("AT+CMGS=");
      
    delay(50);
      
    mySerial.println(14);
      
    delay(50);
     
    //перевернутый номер тела 19731630470F2 изменить на свой этот кусок
      //mySerial.print("0011000B919731630470F20000AA"); 
      
    mySerial.print("0011000B9");
      
    delay(5);
      
    mySerial.print(telnumb_in);
      
    delay(5);
      
    mySerial.print("0000AA");
      
    hexdump_byte(data_length 0xFF);
      
    0;
      
    0;
      for (
    0data_lengthx++)
      {
        if (
    data[x] == '$')  data[x] = 0x02;
        
    |= (data[x] & 0x7F) << l;
        
    += 7
        if (
    >= 8)
        {
          
    hexdump_byte(0xFF);
          
    -= 8;
          
    >>= 8;
        }
      } 
      if (
    != 0)
      {
        
    hexdump_byte(0xFF);
      } 
      
    mySerial.write(26);
    }
    void hexdump_byte(unsigned char byte)
    {
      
    mySerial.print(hexdump_a(byte), BYTE);
      
    mySerial.print(hexdump_b(byte), BYTE);


  2. #2
    Новичок
    Регистрация
    29.03.2012
    Возраст
    38
    Сообщений
    9
    Вес репутации
    165

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

    Цитата Сообщение от metaforos Посмотреть сообщение
    Код несомненно полезный. НО! Учитывая ограниченную память Ардуино, думаю, что если есть программа, то лучше конвертацию в ней проводить.
    Для моей задачи как раз нужно в скетче эту обработку делать и 32 Кб мне просто за глаза. А у кого мега еще проще.

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

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

    Прикольно, намного удобнее, чем "вручеую" отправлять с помощью терминала и АТ команд.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Это какой-ту КОШМАР!!!! Не могу вытащить символы, хоть что делай. Может быть как - то можно "игнорировать" не нужные символы? Что-то типа :

    PHP код:
    if(Serial1.read()=='N' &&Serial1.read()=='N' &&Serial1.read()=='N' &&Serial1.read()=='1' &&Serial1.read()=='8' &&Serial1.read()== '3' &&Serial1.read()=='N' &&Serial1.read()=='0'
    Где N имеет любое значение (число или литера)?
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Chip, вопрос к тебе.
    1. Решил я проблему вытаскивания нужных символов из СМС. Вот скетч:
    PHP код:
     int i=1;
     
    char strok[61]="";
     
    int ledpin 30;
     
    long previousMillis 0;
     
    long interval 5000;
     
    void setup() 
     { 
     
    pinMode(ledpinOUTPUT);
     
    Serial1.begin(9600);
     
    Serial.begin(9600);
     
    Serial1.flush();
     
    delay(5000);
     
    Serial1.println("AT+CPMS ='MT'\r" );
     
    delay(1000);
     
    Serial1.println("AT+CNMI=1,1\r");
     
    delay(1000);
     }

     
    void loop() 

    unsigned long currentMillis millis();
    if(
    currentMillis previousMillis interval)


    previousMillis currentMillis;
    Serial1.println("AT+CMGL=4\r");
    delay(100); 
    }

     
    // отправляю СМС  -   #a1

    if(Serial1.read()=='0' &&Serial1.read()=='7'&&Serial1.read()=='9'//только, если в Serial1 есть СМС, а то он начинает читать с АТ+ и т.д.

    for (i=1i<58i++) strok [i] = Serial1.read();
     
    Serial.print(strok[48]); // 2
    Serial.print(strok[49]); // 1
    Serial.print(strok[50]); // 0
    Serial.print(strok[51]); // 3
    Serial.print(strok[52]); // A
    Serial.print(strok[53]); // 3
    Serial.print(strok[54]); // 7
    Serial.print(strok[55]); // 0
    delay(1000); 


    Но возникла проблема. В Serial Мониторе, иногда показывает правильно "2103А370", а иногда - или "квадратики", или "иероглифы". Что это может быть?
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Но возникла проблема. В Serial Мониторе, иногда показывает правильно "2103А370", а иногда - или "квадратики", или "иероглифы". Что это может быть?
    Получается что принимаешь значения вне диапазона английской кодировки

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

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

    А почему иногда нормально отображается? Использую ведь одно и то же СМС, просто в телефоне его помечаю как непрочитанное.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Вопрос разрешен. Проблема была в расставлении фигурных скобок.
    Вот полностью рабочий скетч для Siemens S55!!!

    Вот только может у кого есть идеи по удалению "корявостей" скетча
    PHP код:
     int i=1;
     
    char strok[61]="";
     
    int ledpin 22;
     
    long previousMillis 0;
     
    long interval 5000;
     
    void setup() 
     { 
     
    pinMode(ledpinOUTPUT);
     
    Serial1.begin(9600);
     
    Serial.begin(9600);
     
    Serial1.flush();
     
    delay(5000);
     
    Serial1.println("AT+CPMS ='MT'\r" );
     
    delay(1000);
     
    Serial1.println("AT+CNMI=1,1\r");
     
    delay(1000);
     }

     
    void loop() 

    unsigned long currentMillis millis();
    if(
    currentMillis previousMillis interval)


    previousMillis currentMillis;
    Serial1.println("AT+CMGL=4\r");
    delay(100); 
    }

     

    if(
    Serial1.read()=='0' &&Serial1.read()=='7' &&Serial1.read()=='9'//только, если в Serial1 есть СМС, а то он начинает читать с АТ+ и т.д.

    {
    for (
    i=1i<58i++) strok[i] = Serial1.read();
    // ВКЛЮЧЕНИЕ - отправляю СМС  -   #a1
    if(strok[48] == '2' &&strok[49] == '1' &&strok[50] == '0' &&strok[51] == '3' &&strok[52] == 'A' &&strok[53] == '3' &&strok[54] == '7' &&strok[55] == '0')
    {
      
    digitalWrite (ledpinHIGH);
      
    delay(1000);
      
    Serial1.println("AT+CMGD=1");
    }
    // ВЫКЛЮЧЕНИЕ - отправляю СМС  -   #a0
    if(strok[48] == '2' &&strok[49] == '1' &&strok[50] == '0' &&strok[51] == '3' &&strok[52] == 'A' &&strok[53] == '3' &&strok[54] == '3' &&strok[55] == '0')
    {
      
    digitalWrite (ledpinLOW);
      
    delay(1000);
      
    Serial1.println("AT+CMGD=1");
    }

    }
    delay(100); 

    Последний раз редактировалось metaforos; 06.04.2012 в 04:24.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

  9. #9
    Пользователь
    Регистрация
    12.11.2011
    Возраст
    50
    Сообщений
    64
    Вес репутации
    181

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

    Молодец...
    Буду пробовать завтра....если все пойдет классные возможности у этого всего будут.

  10. #10
    Пользователь
    Регистрация
    12.11.2011
    Возраст
    50
    Сообщений
    64
    Вес репутации
    181

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

    metaforos Если не трудно погляди что у меня неправильно
    пробовал разные варианты. По экрану телефона вижу что ардуина считывает смс из памяти, но обработать и включить пин 5 не выходит, ну и соответственно стирать тоже не хочет смс из памяти. Скорее всего адреса строк пишу неправильно, но как правильно то???

    PHP код:
    #include <NewSoftSerial.h> //////////// поставить библиотеку сериал
    NewSoftSerial mySerial(2,3);
    int i=1;
    char strok[61]="";
    int ledpin 5;                 //////////// изменить ледпин на другой
    long previousMillis 0;
    long interval 5000;

    void setup() 

    pinMode(ledpinOUTPUT);
    //Serial1.begin(9600);           /////// изменить на другой сериал
    mySerial.begin(9600);
    Serial.begin(9600);
    //Serial1.flush();               /////// изменить ?????????
    mySerial.flush(); 
    delay(5000);
    //Serial1.println("AT+CPMS ='MT'\r" );   /////// ИЗМЕНИТЬ 
    mySerial.println("AT+CPMS ='MT'\r" );
    delay(1000);
    //Serial1.println("AT+CNMI=1,1\r");      ////// изменить 
    mySerial.println("AT+CNMI=1,1\r");
    delay(1000);
    }

    void loop() 

    unsigned long currentMillis millis();
    if(
    currentMillis previousMillis interval)


    previousMillis currentMillis;
    //Serial1.println("AT+CMGL=4\r");   ///////// изменить 
    mySerial.println("AT+CMGL=4\r");
    delay(100); 


    //if(Serial1.read()=='0' &&Serial1.read()=='7' &&Serial1.read()=='9') /////ИЗМЕНИТЬ .....только, если в Serial1 есть СМС, а то он начинает читать с АТ+ и т.д.
    if(mySerial.read()=='0' &&mySerial.read()=='7' &&mySerial.read()=='9')
    {
    //for (i=1; i<58; i++) strok[i] = Serial1.read();      ////// ИЗМЕНИТЬ 
    //for (i=1; i<58; i++) strok[i] = mySerial.read();
    for (i=1i<60i++) strok[i] = mySerial.read();
    // ВКЛЮЧЕНИЕ - отправляю СМС  -   #a1
    //if(strok[48] == '2' &&strok[49] == '1' &&strok[50] == '0' &&strok[51] == '3' &&strok[52] == 'A' &&strok[53] == '3' &&strok[54] == '7' &&strok[55] == '0')
    //if(strok[49] == '1' &&strok[50] == '0' &&strok[51] == '3' &&strok[52] == 'A' &&strok[53] == '3' &&strok[54] == '7' &&strok[55] == '0')
    if(strok[52] == '1' &&strok[53] == '0' &&strok[54] == '3' &&strok[55] == 'A' &&strok[56] == '3' &&strok[57] == '7' &&strok[58] == '0')
    {
    digitalWrite (ledpinHIGH);
    delay(1000);
    //Serial1.println("AT+CMGD=1");   /////// ИЗМЕНИТЬ 
    mySerial.println("AT+CMGD=1");
    }
    // ВЫКЛЮЧЕНИЕ - отправляю СМС  -   #a0
    //if(strok[48] == '2' &&strok[49] == '1' &&strok[50] == '0' &&strok[51] == '3' &&strok[52] == 'A' &&strok[53] == '3' &&strok[54] == '3' &&strok[55] == '0')
    //if(strok[49] == '1' &&strok[50] == '0' &&strok[51] == '3' &&strok[52] == 'A' &&strok[53] == '3' &&strok[54] == '3' &&strok[55] == '0')
    if(strok[52] == '1' &&strok[53] == '0' &&strok[54] == '3' &&strok[55] == 'A' &&strok[56] == '3' &&strok[57] == '3' &&strok[58] == '0')
    {
    digitalWrite (ledpinLOW);
    delay(1000);
    //Serial1.println("AT+CMGD=1");  /////// ИЗМЕНИТЬ
    mySerial.println("AT+CMGD=1");
    }

    }
    delay(100); 

    }  
    //0  7  9  1  9  7  6  1  9  8  9  9  0  1  F  0  2  4  0  B  9  1  9  7  6  1  4  6  4  3  3  9  F  2  0  0  0  0  2  1  4  0  5  0  7  1  9  4  6  1  6  1  0  3  A  3  7  0  0  C      -    #a1
    //1  2  3  4  5  6  7  8  9 10             15             20              25             30            35             40              45            50             55             60        
    //0  7  9  1  9  7  6  1  9  8  9  9  0  1  F  0  2  4  0  B  9  1  9  7  6  1  4  6  4  3  3  9  F  2  0  0  0  0  2  1  4  0  5  0  8  1  0  2  4  1  6  1  0  3  A  3  3  0  0  C       -   #a0
    //                                                                                                                                    -     -  -  -                       - 
    Поставил строку Serial.println(strok[52]); чтоб понять значение strok[52] ...но значение выводится закорючкой!!!!
    Последний раз редактировалось igvv; 05.04.2012 в 21:33.

Страница 33 из 43 ПерваяПервая ... 2327282930313233343536373839 ... ПоследняяПоследняя

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

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

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

Ваши права

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