Доброго времени суток. Есть простая сигнализация с герконом, но потребовалось отправлять смс на второй номер.Как решить данную задачу? в 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(); }
Код (C++): if (gprs.sendSMS(PHONE_NUMBER, message) and gprs.sendSMS(PHONE_NUMBER1, message)) Serial.println("Success"); else Serial.println("Error"); СМС приходит только первому номеру
В си оператора and нет, скорее всего вам нужно && (есть еще просто &). Вам разве ошибка не выскакивала?
Ну во первых в очередной раз повторюсь - библиотеки для 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);