Вопрос про МИЛЛИС()
Добавлено: 17 сен 2017, 15:20
В програмировании новичек.Прошу обьяснить на человеческом языке как пользоваться миллись, данный код будет работать так-при получении смс с текстом ОН переходим к функции старт в ней включаем зажигание,ждем пару секунд,включаем стартер на пару секунд,считываем пришел ли положительный сигнал со стартера(если нет то выключаем зажигание) если да то через заданное время например через 10 минут выключаем зажигание.Если приходит смс со словом ОФФ все выключаем.
Код: Выделить всё
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
}