Mega + GSM
- Войдите на сайт для отправки комментариев
Пнд, 06/01/2014 - 08:21
С наступившим всех сообщники! Есть пара вопросов по теме.
Код:
#include <SoftwareSerial.h> SoftwareSerial gprsSerial(50, 51); // RX, TX int greenPin = 22; int bluePin = 23; void setup() { gprsSerial.begin(19200); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку gprsSerial.print("AT+CMGF=1\r"); delay(300); gprsSerial.print("AT+IFC=1, 1\r"); delay(300); gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(300); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(500); } String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void loop() { if (!gprsSerial.available()) return; char currSymb = gprsSerial.read(); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Green on")) { digitalWrite(greenPin, HIGH); } else if (!currStr.compareTo("Green off")) { digitalWrite(greenPin, LOW); } else if (!currStr.compareTo("Blue on")) { digitalWrite(bluePin, HIGH); } else if (!currStr.compareTo("Blue off")) { digitalWrite(bluePin, LOW); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } }
Тут все ок, диоды загораются и выключаются. Так вот вопрос.
1. Проверка состояния смс-командой status. Что включено а что нет. Ответной смс.
Не обязательно по каджому диоду, можно просто ответ общим списком.
Или ответная смс по статусу. Например включил диод - ответная смс о том, что он включен.
2. Как сделать проверку номера отправителя (2 разных номера)?
Ссылки на доки приветствуются, тыканье носом тоже. Заранее благодарен.
PS. Для первого варианта так покатит (после 41-й):
Serial.println("AT+CMGF=1"); // выставляем текстовым режим сообщений delay(1000); Serial.print("AT+CMGS="); // отправляем смс Serial.print((char)34); Serial.print("8000000000"); // номер получателя Serial.print((char)34); // символ кавычки " Serial.print((char)13); // символ <cr> (ASCII character 13) delay(1500); Serial.print("Green on"); // текст смс delay(500); Serial.print((char)26); // символ <ctrl-z> (ASCII character 26) delay(5000);
Или запихать в отдельную функцию?
И после loop()
Получилось получать смс после команды.
Осталось узнать как верифицировать номера с которых отправляются команды и получение общего статуса.
Походу шилду хана настала внезапно. Вообще не отзывается.