Отправка смс на два номера

Тема в разделе "Arduino & Shields", создана пользователем StepVik, 21 фев 2020.

  1. StepVik

    StepVik Нуб

    Доброго времени суток. Есть простая сигнализация с герконом, но потребовалось отправлять смс на второй номер.Как решить данную задачу? в C++ не силен, поэтому прошу помощи. Спасибо.

    Код (C++):
    #include <GPRSk_Shield_Arduino.h>
    #include <sim900.h>
    int switchPin = 2; // к выводу 2 подключён геркон


    // библиотека для эмуляции Serial порта
    // необходима для работы библиотеки GPRSk_Shield_Arduino
    #include <SoftwareSerial.h>
    // создаём объект mySerial и передаём номера управляющих пинов RX и TX
    SoftwareSerial mySerial(7, 8);
    // номер на который будем отправлять сообщение
    #define PHONE_NUMBER  "+7**********"
    #define PHONE_NUMBER1  "+7*********"
    // создаём объект класса GPRS и передаём в него объект Serial1
    GPRSk gprs(mySerial);
    // значение геркона
    #define GERK 0
    unsigned long millissend;
    void setup()
    {
      pinMode(switchPin, INPUT); // задаём вывод 2 в качестве входа (будем считывать с него)
      digitalWrite(switchPin, HIGH); // активируем внутренний подтягивающий резистор вывода
        Serial.begin(9600); // задействуем последовательный порт

     
      // открываем последовательный порт для мониторинга действий в программе
      Serial.begin(9600);

      // открываем Serial-соединение с GPRS Shield
      mySerial.begin(9600);
      // ждём пока не откроется монитор последовательного порта
      // для того, чтобы отследить все события в программе
      while (!Serial) {
      }
      Serial.print("Serial init OKrn");
      // включаем GPRS-шилд
      gprs.powerOn();
      // проверяем, есть ли связь с GPRS-устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
        // и выводим сообщение об ошибке;
        // процесс повторяется в цикле,
        // пока не появится ответ от GPRS-устройства
        delay(1000);
        Serial.print("GPRS Init errorrn");
      }
      // вывод об удачной инициализации GPRS Shield
      Serial.println("GPRS init success");
    }
    void loop()
    {
      int g = digitalRead(switchPin); // считываем показания с геркона
        Serial.println(g); // посылаем в последовательный порт значения с геркона
      //когда геркон замкнут, значение "0" (LOW), когда разомкнут - "1" (HIGH)
      delay(3000); // повторяем цикл через ??? мсек
             
          if(g>GERK) {
             // отправить SMS
             // подготовка сообщения для отправки:
             char message[32];
             sprintf(message,"OPEN!");
                   
             // сообщаем о начале отправки SMS по указанному номеру
             Serial.println("Start to send message ...");
           
             // отправляем сообщение по указанному номеру с заданным текстом
             if (gprs.sendSMS(PHONE_NUMBER, message))
                Serial.println("Success");
             else
                Serial.println("Error");
             // ждем 10 минут
             delay(5000);
          }
          millissend=millis();
       }
     
  2. NikitOS

    NikitOS Король шутов Администратор

     
    StepVik нравится это.
  3. StepVik

    StepVik Нуб

     
  4. NikitOS

    NikitOS Король шутов Администратор

    И как же добавляете?
     
    StepVik нравится это.
  5. StepVik

    StepVik Нуб

    Код (C++):
     if (gprs.sendSMS(PHONE_NUMBER, message) and gprs.sendSMS(PHONE_NUMBER1, message))        
                Serial.println("Success");
             else
                Serial.println("Error");
    СМС приходит только первому номеру
     
  6. Daniil

    Daniil Гуру

    В си оператора and нет, скорее всего вам нужно && (есть еще просто &).
    Вам разве ошибка не выскакивала?
     
  7. a1000

    a1000 Гуру

    Ну во первых в очередной раз повторюсь - библиотеки для GPRS шилдов это кака. Работайте сразу АТ командами. Это нагляднее и понятней.
    Теперь к коду.
    Код (C++):
    Serial.begin(9600); // задействуем последовательный порт

      // открываем последовательный порт для мониторинга действий в программе
      Serial.begin(9600);
    Зачем два раза?
    Код (C++):
    millissend=millis();
    Это зачем? Если при изменении концепции кода что-то становится не нужным, от мусора надо избавляться.
    Если вам надо отправить всего лишь одно слово OPEN! зачем эти танцы с бубном
    Код (C++):
    // подготовка сообщения для отправки:
             char message[32];
             sprintf(message,"OPEN!");
    пишите сразу без затей
    Код (C++):
    gprs.sendSMS(PHONE_NUMBER, "OPEN!")
    Ну и пока мало опыта не пробуйте создавать сильно сложные конструкции типа
    Код (C++):
    if (gprs.sendSMS(PHONE_NUMBER, message) and gprs.sendSMS(PHONE_NUMBER1, message))
    Надо отправить на два номера, сделайте два раза
    Код (C++):
    if (gprs.sendSMS(PHONE_NUMBER, "OPEN!"))  Serial.println("Success");
             else  Serial.println("Error");
    if (gprs.sendSMS(PHONE_NUMBER1, "OPEN!"))  Serial.println("Success1");
             else  Serial.println("Error1");
             // ждем 10 минут
             delay(5000);