Создание скрипта для ardruino nano и gsm a6
- Войдите на сайт для отправки комментариев
Чт, 12/01/2017 - 21:22
Помогите. Нужен скрипт для того чтобы сделать sms переключатель. Надо чтобы по sms "start" пропускало сигнал а по sms "stop" прекрощало пропускать сигнал.
Вот готовый только тут подкоректируй под свои нужды.
#include <SoftwareSerial.h> SoftwareSerial gprsSerial(2, 3); // установка контактов 2 и 3 для программного порта #define RELE 4 bool rele = HIGH; char* adminNumber[]={"+79xxxxxxxxx", "+79xxxxxxxxx"}; int8_t i; void setup() { Serial.begin(115200); gprsSerial.begin(115200); pinMode(RELE, OUTPUT); digitalWrite(RELE, HIGH); // настройка приема сообщений gprsSerial.print("AT+CMGF=1\r"); // устанавливаем текстовый режим смс-сообщения delay(500); // gprsSerial.print("AT+IFC=1, 1\r"); // устанавливаем программный контроль потоком передачи данных delay(500); gprsSerial.print("AT+CPBS=\"SM\"\r"); // открываем доступ к данным телефонной книги SIM-карты delay(500); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); // включает оповещение о новых сообщениях, новые сообщения приходят в следующем формате: +CMT: "<номер телефона>", "", "<дата, время>", //на следующей строчке с первого символа идёт содержимое сообщения delay(700); } String currStr = ""; // если эта строка сообщение, boolean isStringMessage = false; // то ставим флаг на разрешение оброботки SMS void loop() { if (!gprsSerial.available())// если не данных от модуля SIM800l, то дальше не идем. return; char currSymb = gprsSerial.read(); // записываем в переменую символы, которые получили от модуля. if ('\r' == currSymb) // если получили символ перевода коректи в начало строки, это означает что передача сообщения от модуля завершена. { if (isStringMessage) { // если текущая строка – сообщение, то… if (!currStr.compareTo("on")) { // если текст сообщения совпадает с "on", rele = LOW; // то включаем низкоуровневое реле. digitalWrite(RELE, rele); } if (!currStr.compareTo("off")) { // если текст сообщения совпадает с "off", rele = HIGH; // то выключаем низкоуровневое реле. digitalWrite(RELE, rele); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { // если текущая строка начинается с "+CMT", то следующая сообщение for (i = 0; i <= 1; i++) { // число 3 - это количество заданных тел.номеров. if (currStr.indexOf(adminNumber[i])) //сверяем номер с номером прешедним SMS { Serial.println(adminNumber[i]); isStringMessage = true; break; } } } } currStr = ""; } else if ('\n' != currSymb) { // игнорируем второй символ в последовательности переноса строки: \r\n , и currStr += String(currSymb); //дополняем текущую команду новым сиволом } }Если что пишите решим вопрос golinskiy.konstantin@gmail.com
Если что пишите решим вопрос golinskiy.konstantin@gmail.com
Спасибо большое!
Ну что работает?
Пока не проверял.