Код: Выделить всё
String numberSMS_1 = "+7911777777";
String text_1 = "ENGINE START";
String text_2 = "ENGINE STOP";
String text_3 = "ENGINE NO START,RESTART";
String text_4 = "ENGINE NO START";
#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(2,3);
byte engine=11;
byte starter=12;
byte generator=8;
byte parking=7;
char* adminNumber[]={"+79111777048", "+7911177777"};
int8_t i;
void setup()
{
digitalWrite(engine,!LOW); // выключаем ING 1
digitalWrite(starter,!LOW); // выключаем STARTER
//ВХОДЫ
pinMode(engine,OUTPUT); //зажигание
pinMode(starter,OUTPUT); //стартер
//ВЫХОДЫ
pinMode(generator,INPUT); //вход генератора
pinMode(parking,INPUT); //вход положения селектора акпп
Serial.begin(19200);
gprsSerial.begin(19200);
// настройка приема сообщений
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);
gprsSerial.println("AT+CLIP=1");
delay(300);
gprsSerial.println("AT+CMGF=1");
delay(300);
gprsSerial.println("AT+CSCS=\"GSM\"");
delay(300);
gprsSerial.println("AT+CNMI=2,2,0,0,0");
delay(300);
}
String currStr = ""; // если эта строка сообщение,
boolean isStringMessage = false; // то ставим флаг на разрешение оброботки SMS
/* Функция отправки SMS */
void sendSMS(String text, String phone) {
gprsSerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
gprsSerial.print(text);
delay(500);
gprsSerial.print((char)26);
delay(2500);
}
void loop()
{
if (!gprsSerial.available())// если не данных от модуля SIM800l, то дальше не идем.
return;
char currSymb = gprsSerial.read(); // записываем в переменую символы, которые получили от модуля.
if ('\r' == currSymb) // если получили символ перевода коректи в начало строки, это означает что передача сообщения от модуля завершена.
{
if (isStringMessage) // если текущая строка – сообщение, то…
{
if (!currStr.compareTo("On")) // если текст сообщения совпадает с "on",
{
start();
}
//----------------------------------------------------------------------------------------
if (!currStr.compareTo("Off")) // если текст сообщения совпадает с "off",
{
stop();
}
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); //дополняем текущую команду новым сиволом
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void start()
{
digitalWrite(engine,LOW); // включаем ING 1
delay(2000);
digitalWrite(starter,LOW); // включаем STARTER
delay(2000);
if(digitalRead(generator)==1) //ЕСЛИ ДВИГАТЕЛЬ ЗАВЕЛСЯ
{
digitalWrite(starter,!LOW); // выключаем STARTER
}
else //ЕСЛИ НЕТ
{
digitalWrite(starter,!LOW); // выключаем STARTER
digitalWrite(engine,!LOW); // включаем зажигание
}
delay(5000); //-----------------------КАК В ЭТОМ МЕСТЕ СДЕЛАТЬ ЗАДЕРЖКУ НА 10 МИНУТ С ПОМОЩЬЮ МИЛЛИС КАК НИ ЛОМАЛ ГОЛОВУ НИКАК НЕ ПОБЕДИТЬ МИЛЛИС ЧТО БЫ ЧЕРЕЗ 10 МИН
// ВЫКЛЮЧАЛСЯ СТАРТЕР И ВЫКЛЮЧАЛОСЬ ЗАЖИГАНИЕ
//-----------------------ЕСЛИ МОЖНО ПОПОДРОБНЕЕ РАСПИСАТЬ ДЕЙСТВИЯ С МИЛЛИС
{
digitalWrite(engine,!LOW); // выключаем ЗАЖИГАНИЕ
}
}
//_____________________________________________________________________________________________________________________________________________________
void stop()
{
digitalWrite(engine,!LOW); // выключаем ING 1
digitalWrite(starter,!LOW); // выключаем STARTER
}