Помогите с кодом

Тема в разделе "Arduino & Shields", создана пользователем grx1a, 18 янв 2014.

  1. grx1a

    grx1a Гик

    Здравствуйте есть следующий код для GSM GPRS модуля, проблема в том что при проверке выходит ошибка 'BYTE' keyword is no longer supported. на строку cell.print(34,BYTE); // ASCII equivalent of symbol ( " )
    Пробовал искать в инете подобную проблему, нашел толькл то что в последних версиях ардуино keyword 'BYTE' больше не поддерживается, говорят что данную проблему можно решить через Serial.write() но как можно применить к данной ситуации?
    В общем что должно получиться: Надо как то символ ( " ) отправить в cell.print минуя больше не работующий BYTE.
    Затем полагаю возможно возникнет вторая примерно похожая проблема с строкой cell.println(26,BYTE); // ASCII equivalent of Ctrl-Z






    Код (Text):



    #include <NewSoftSerial.h>

    NewSoftSerial cell(2,3);                                                // This creates a new instance of
                                                                                              // NewSoftwareSerial under thename gps.
                                                                                              // the format in the brackets is (rx,tx)
    char phoneNumber[] = "+7*********";                     // Replace xxxxxxxx with the recipient's mobile number
    char SMS_Service_Number[] = "+7*********";        // Replace xxxxxxxx with the recipient's mobile number

    void setup()
    {
      cell.begin(19200);                                  
      delay(35000);                                                            // Allow GSM to initialize
      Serial.begin(19200);                                                // baud rate, like so:
      Serial.print (" GSM_GPRS System Activated ");
    }

    void loop()
    {
      cell.print("AT+CMGF=1");                          // set SMS mode to text
      cell.print("AT+CSCA=");                              //Setting for the SMS Message center number,    
      cell.print(34,BYTE);                                     // ASCII equivalent of "
      cell.print(SMS_Service_Number);           // Phone number
      cell.print(34,BYTE);                                   // ASCII equivalent of "
      cell.print("AT+CMGS=");                           // start our message
      cell.print(34,BYTE);                                   // ASCII equivalent of "
      cell.print(phoneNumber);                        // Phone number
      cell.println(34,BYTE);                               // ASCII equivalent of "
      delay(500);                                                // give the module some thinking time
      cell.print(" Hi , this is ARDUINO GSM Robot test SMS message" ); // message set to phone number
      cell.println(26,BYTE);                             // ASCII equivalent of Ctrl-Z  
      delay(15000);                                          // The GSM module needs to return to an OK status
          {
             delay(1);
          }  
       while (1>0);                                             // if you remove this you will get a text message every 30 seconds or so.
    }



    Заранее спасибо!!!
     
    Последнее редактирование: 19 янв 2014
  2. grx1a

    grx1a Гик

  3. geher

    geher Гуру

    cell.print("\0x22");
    ?

    Дополнение.
    Прошу прощения, потерялся слэш. Исправил.
     
    Последнее редактирование: 18 янв 2014
  4. grx1a

    grx1a Гик

    спасибо, сейчас попробую, а как быть с Ctrl-Z
    где найти информацию по тому как символ (") превращается в ("0x22")
     
  5. grx1a

    grx1a Гик

    с символом (") проверку проходит но на Ctrl-Z такая же проблема пологаю как то надо совместить теперь кнопку Ctrl и ("0x7A")
     
  6. geher

    geher Гуру

    Если
    cell.println(34,BYTE); // ASCII equivalent of "
    и при этом
    cell.println(26,BYTE); // ASCII equivalent of Ctrl-Z
    и работает
    cell.print("\0x22");
    вместо первого,
    то логично предположить, что Ctrl-Z можно попробовать выдать при помощи
    сell.print("\0x1A");

    Собственно говоря, весь фокус в возможности вставить в строку символ с любым кодом при помощи конструкции
    \0xHH
    , где HH - шестнадцатеричное представление кода символа.
     
    Последнее редактирование: 18 янв 2014
    grx1a нравится это.
  7. grx1a

    grx1a Гик

    Спасибо за помощь, код проверку прошел до конца но потом вышел error compiling, причина в библиотеках \arduino-1.0.3-windows\arduino-1.0.3\libraries\NewSoftSerial/NewSoftSerial.h:33:2: error: #error NewSoftSerial has been moved into the Arduino core as of version 1.0. Use SoftwareSerial instead. Это уже проблема дугого характера, ладно надо теперь с библиотеками разобраться, как что получится или не получится напишу
     
  8. grx1a

    grx1a Гик

    Нет, все равно не работает как надо написал проверочный код что бы отследить строки в seria monitor
    и с наклонной чертой влево и без нее надо какой то другой вариант решения
    вот что получается
    Код (Text):


    char phoneNumber[] = "+79145813412";  
    void setup()
    {
    Serial.begin(9600);
    Serial.println("AT+CMGF=1");
    Serial.print("AT+CSCA=");
    Serial.print("\0x22");
    Serial.print(phoneNumber);
    Serial.println("0x22");



    }

    void loop()
    {
     
    }

     в результате в serial monitor выходит
    AT+CMGF=1
    AT+CSCA=+791458134120x22
     
  9. grx1a

    grx1a Гик

    а должно быть так
    AT+CMGF=1
    AT+CSCA="+79145813412"
     
  10. grx1a

    grx1a Гик

    Сростил, все получилось, но только со знаком (")
    вот как выглядит код в таком случае
    Код (Text):

    char phoneNumber[] = "+79145813412";  
    void setup()
    {
    Serial.begin(9600);
    Serial.println("AT+CMGF=1");
    Serial.print("AT+CSCA=");
    Serial.write(34);
    Serial.print(phoneNumber);
    Serial.write(34);
    Serial.println();



    }

    void loop()
    {
     
    }
    а в serial monitor-e все как надо
     
  11. grx1a

    grx1a Гик

    теперь нужна помощь с т ем как с имитировать нажатие клавиш Ctrl+Z, в ASCII где такую информацию можно раздобыть? Обычно пишут инфу в инете на отдельные клавиши, а как их ссумировать?
     
  12. grx1a

    grx1a Гик

    Вот еще пример кода подобного нашел у буржуев они символ (") сделали вот так
    Serial.print("\"\r"); а на месте Ctrl-Z у них стоит Serial.write(26); наверное это и есть то что мне надо, то самое Ctrl-Z в ASCII , надо на GPRS модуле все прогнать
    код получился таким
    Код (Text):


    char phoneNumber[] = "+79145813412";  
    void setup()
    {
      Serial.begin(9600);
      Serial.println("AT+CMGF=1");
      Serial.print("AT+CSCA=");
      Serial.print("\"\r");
      Serial.print(phoneNumber);
      Serial.println("\"\r");
      Serial.write(26);
     
    }

    void loop()
    {
    }
     
  13. grx1a

    grx1a Гик

    полуфинал пока получился такой, буду работать дальше
    Код (Text):




    #include <SoftwareSerial.h>                       // Подключаем библиотеку SoftwareSerial.h

    SoftwareSerial telefone(2,3);                     // Соединение с именем telefone, rx-ом на ARDUINO будет pin 2,  tx-ом на ARDUINO будет pin 3
                                                      // (на GSM модуле все должно быть в инверсии, т.е.
                                                      // [pin rx arduino подлючается к pin tx GSM GPRS module] и [pin tx arduino подлючается к pin rx GSM GPRS module] )                      
                                                     
    char phoneNumber[] = "+79147913458";               // Номер на который будет отправлено SMS сообщение
    char SMS_Service_Number[] = "+79147991000";        // Номер SMS центра (он постоянен, для каждого оператора/региона свой)(Пример: МТС Дальний восток +79147991000)

    void setup()
    {
     
      telefone.begin(19200);                           // Запуск соеденения ARDUINO с GSM GPRS модулем        
      delay(5000);                        
      Serial.begin(19200);                              // Запуск соеденения ARDUINO с PC              
      Serial.print (" GSM_GPRS System Activated ");
    }

    void loop()
    {
      telefone.println("AT+CMGF=1");        // Переводим GSM модуль в режим текста
      telefone.print("AT+CSCA=");           // Активируем номер SMS центра в GSM модуль    
      telefone.print("\"\r");               // Знак ( " )
      telefone.print(SMS_Service_Number);   // Вводим номер SMS центра в GSM модуль
      telefone.println("\"\r");             // Знак ( " )
      telefone.print("AT+CMGS=");           // Активируем номер телефона на который будет отправлено SMS сообщение
      telefone.print("\"\r");               // Знак ( " )
      telefone.print(phoneNumber);          // Вводим номер телефона на который будет отправлено SMS сообщение
      telefone.println("\"\r");             // Знак ( " )
      delay(500);                           // Даем время GSM модулю подумать
      telefone.print(" Hi , this is ARDUINO GSM Robot test SMS message" ); // Вводим текстовое сообщение которое надо отправить на ранее указаный телефон
      telefone.write(26);                   // Ctrl-Z в ASCII
      delay(15000);                  
         {
            delay(1);
         }
      while (1>0);                         // ВНИМАНИЕ!!!Если удалить эту строку то функция loop начнет слать десятки сотни или даже милионы сообщений  в секунду
                                           // что приведет к огроменным денежным расходам за услугу SMS сообщений!!!!!
    }
     
    Последнее редактирование: 19 янв 2014
  14. grx1a

    grx1a Гик

    5 дней по 9 часов непрерывного поиска в инете книгах и черт знает где дали положительные результаты, надеюсь этот раздел поможет тем кто пойдет по тому же направлению что и я. Кстати Библиотека NewSoftSerial.h у меня не пошла, буржуи пишут что в новых версиях ардуино функции этой библиотеки уже включены по умолчанию в стандартную библиотеку SoftwareSerial.h
     
    Последнее редактирование: 19 янв 2014
  15. geher

    geher Гуру

    Однако выяснилось, что 0 сразу после слэша в такой конструкции лишний (когда речь идет о символе в строке). Прошу прощения за невольную дезинформацию.