Страница 33 из 44 ПерваяПервая ... 232728293031323334353637383943 ... ПоследняяПоследняя
Показано с 321 по 330 из 435
  1. #321
    Новичок
    Регистрация
    29.03.2012
    Возраст
    36
    Сообщений
    9
    Вес репутации
    150

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

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

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

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

    Попробовал поиграться (в меру сил) со string, substring тоже ничего не вышло хотя козалось бы что все верно делается.
    Это я к тому, что в том скетче моем, тоже была проблема со string, там тоже он не хотел работать из-за того, что другой(не поддерживаемый) тип данных ему давал(с запятой чтоли не помню), а string с этим типом данных не работает, поэтому пришлось усложнять дальше...какая-то-такая-то заморока была и там со стрингом.
    Все описанное ИМХО мое

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

    По умолчанию 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);


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

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

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

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

    По умолчанию 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.

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

    По умолчанию 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.

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

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

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

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

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

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

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

    Лампочка 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.

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

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

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

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

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

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

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

Ваши права

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