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

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

    В принципе, скетч рабочий, но как-то не так. Прикол вот в чем:

    Я сохраняю сообщения в памяти телефона gsm.println("AT+CPMS ='MT'\r" );

    При @a1 мне приходит - 0791836027201111040C918360577638660000213022911575 800380700C

    Я так понимаю, что текст сообщения это - 00380700?
    Но, gsm.read туда не добирается. Он читает с самого начала. Т.е. если я указываю в скетче 07918360 - светодиод нормально включается, после чего, включается AT+CMGD=1 и сообщение успешно удаляется. Каким образом он у тебя доходит до текста сообщения? Сейчас смотрю тему о String (http://arduino.cc/en/Tutorial/StringSubstring) Я где-то там встречал, как из текста выдернуть именно то, что нужно.
    Последний раз редактировалось metaforos; 23.03.2012 в 00:56.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Что-то типо такого (судя по инструкции):
    PHP код:
    #include <string.h>


     
     
    int ledpin 13;
     
    long previousMillis 0;
     
    long interval 30000;
     
    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); }

     
    String text=Serial1.read();
     if(
    text.substring(51,60) == "00380700")
     {
    digitalWrite(ledpin,HIGH);

     
    delay(1000);

     
    Serial1.println("AT+CMGD=1\r");

     
    delay(1000);

     }

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

  3. #263
    Пользователь
    Регистрация
    08.12.2011
    Сообщений
    84
    Вес репутации
    169

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

    возможно как вариант все значение не влезает в буфер и где то нужно его слить(буфер) я тоже с этим долго боролся и число нужно ловить по байтам так как указано в моем скетче
    Последний раз редактировалось andrei2882; 23.03.2012 в 20:09.

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

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

    То что по байтам, это понятно. Вот только как добраться до нужных нам. Может все таки попробовать с массивом? Я думаю все 60 байт загнать в массив (по одному байту в каждую ячейку), потом открыть ячейки с 52 по 59, присвоить им имя и сравнить его с нужным нам. Сейчас мучаюсь над этим.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

  5. #265
    Пользователь
    Регистрация
    08.12.2011
    Сообщений
    84
    Вес репутации
    169

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

    тоже так по началу пробовал но если он не читает эти байты то и в массив не внесет их хотя работа с массивом и распечатка данных массива мне помогла понять в какой момент слить флеш надо

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

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

    Вот этот код читает побайтно пока не найдет знак '#'

  7. #267
    Пользователь
    Регистрация
    08.12.2011
    Сообщений
    84
    Вес репутации
    169

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

    Чип скажи пожалуйста в буфер информация заносится только после команды Serial.read() или информация сразу приходит в буфер и читается из буфера

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

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

    Информация в буфер попадает не зависимо от пользовательского кода по прерыванию.
    Serial.read() это функция которая читает первый из буфера и удаляет его, продвинув на его место следующий байт
    Serial.available() указывает сколько принятых байт в буфере
    Последний раз редактировалось Chip; 24.03.2012 в 00:57.

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

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

    Цитата Сообщение от Chip Посмотреть сообщение
    Вот этот код читает побайтно пока не найдет знак '#'
    Chip, этот код не подойдет. В этом коде, мы уже прописываем то, что должно прийти. Это для текстового формата. А нам нужно PDU побороть и вытащить - 00380700 из этого 0791836027201111040C918360577638660000213022025201 800380700C.

    Можно было бы всю строку перебрать и дойти до 52 байта, но середина строки постоянно меняется (дата и время).

    Я вот только не пойму, почему в моем коде substring не работает. А эта функция решила бы нашу проблему...
    Последний раз редактировалось metaforos; 24.03.2012 в 04:54.
    Liliput 629 GL, Intel Atom N230 1.6, HDD 200 GB, ОЗУ 2GB, Globalsat GT-100.

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

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

    Принимайте еще одного сумасшедшего
    Тестирую на сименсе ME45 c freeduino2009 через резист делитель
    нормально выходит только позвонить с ардуины

    Вот по этому скетчу Светодиод редко поморгает и все! что на 19200 что на 9600
    СМСки не стираются... но уже что-то!

    #include <NewSoftSerial.h>
    char inchar[100];
    NewSoftSerial gsm(2,3);
    int ledpin = 13;
    void setup()
    {
    pinMode(ledpin, OUTPUT);
    gsm.begin(19200);
    Serial.begin(19200);
    gsm.flush();
    delay(5000);
    gsm.println("AT+CNMI=1,1");
    delay(2000);

    }
    void loop()
    {
    //gsm.println(" ATD+12345678;");
    //delay(3000);
    if(gsm.available() >0 && gsm.read()=='1'){gsm.println(" AT+CMGL=0 ");
    digitalWrite(ledpin, HIGH);delay(1000);digitalWrite(ledpin, LOW);delay(1000);
    for(int i=0;i<98;i++){inchar[i]=gsm.read();delay(100);}
    //gsm.flush();
    digitalWrite(ledpin, HIGH);delay(1000);digitalWrite(ledpin, LOW);delay(1000);
    for(int i=0;i<98;i++){Serial.print(inchar[i]);}
    digitalWrite(ledpin, HIGH);delay(1000);digitalWrite(ledpin, LOW);delay(1000);
    gsm.println("AT+CMGD=1");
    digitalWrite(ledpin, HIGH);delay(1000);digitalWrite(ledpin, LOW);delay(1000);
    gsm.flush();
    }

    }

    А вот в этом сообщении #256 скетч... ничего не происходит.

    И еще есть вопрос!? в скетчах с Serial1 на какие пины мне сажать tx rx ??? На пин0 и пин1 для платки freeduino2009 ???

    Пока только 3-й день этим как занялся...

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

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

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

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

Ваши права

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