Создание скрипта для ardruino nano и gsm a6

bogdan1609
Offline
Зарегистрирован: 12.01.2017

Помогите. Нужен скрипт для того чтобы сделать sms переключатель. Надо чтобы по sms "start" пропускало сигнал а по sms "stop" прекрощало пропускать сигнал.

Panzerfunker
Offline
Зарегистрирован: 28.10.2016

Вот готовый только тут подкоректируй под свои нужды.

#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); //дополняем текущую команду новым сиволом
 }
}

 

Panzerfunker
Offline
Зарегистрирован: 28.10.2016

Если что пишите решим вопрос golinskiy.konstantin@gmail.com

bogdan1609
Offline
Зарегистрирован: 12.01.2017

Panzerfunker пишет:

Если что пишите решим вопрос golinskiy.konstantin@gmail.com


Спасибо большое!

Panzerfunker
Offline
Зарегистрирован: 28.10.2016

Ну что работает?

bogdan1609
Offline
Зарегистрирован: 12.01.2017

Пока не проверял.