как выполнить остановку кода

practikant
Offline
Зарегистрирован: 21.06.2018

Ув. Форумчане я начинающий ардуинщик и прошу тапками в меня не кидать.

На ардуине нано собрал простейшую сигналку ,при сработке на датчике производится отправка смс на мобилку.

код вот:

{
 
   Serial.begin(9600);
 
  smsSerial.begin(9600);
 
   pinMode(sense_pin,INPUT);
 
   digitalWrite(sense_pin,LOW);
 
 
 
}
 
void loop()
 
{
 
   // Отправлять сообщения всякий раз когда sense_pin устанавливается в 1
 
   if (digitalRead(sense_pin)==HIGH) // Проверка если sense_pin установлен в 1
 
   {
 
     smsSerial.println("AT+CMGF=1"); // Установка текстового режима
 
      delay(150);
 
      smsSerial.println("AT+CMGS=\""+number+"\""); // Укажите номер получателя в международном формате, заменив 7 если это не Россия
 
      delay(150);
 
      smsSerial.print("Warning! SIM800L"); // Введите отправляемое сообщение
 
      delay(150);
 
      smsSerial.write((byte)0x1A); // Символ окончания сообщения 0x1A : эквивалентно Ctrl+z
 
      delay(50);
    }
 
Все работает ,но вот проблема в том ,что смс-ки сыпет с периодичностью  delay(150) . Если это не предоставляется тяжким и неподъемным трудом подскажите как можно сделать чтоб после отправки 2-х смс-ок девайс отключался. Очень буду благодарен за помощь.
b707
Offline
Зарегистрирован: 26.05.2017

practikant пишет:

 подскажите как можно сделать чтоб после отправки 2-х смс-ок девайс отключался. Очень буду благодарен за помощь.

Элементрано.

добавьте переменную счетчик, при каждой отправке СМС увеличивайте счетчик на единицу. как только счетчик достигнет нужного числа СМС, например == 2 - больше не отправляйте.

andryn
Offline
Зарегистрирован: 08.06.2018

1. Вставить код правильно, а то читать его невозможно.

2. Добавить if с проверкой того, что sms уже отправлена.

practikant
Offline
Зарегистрирован: 21.06.2018

А вы не могли бы пример этого кода написать.Простите за наглость. Я реально пока на нулевом уровне в програмировании. У нас в городе спросить неукого. Заранее премного благодарен. Участились случи краж в нашем районе, по этому начал пилить эту тему.

b707
Offline
Зарегистрирован: 26.05.2017

practikant пишет:

У нас в городе спросить неукого.

что, и гугля нет? :)

На самом деле - "не нужен тебе пример кода, Вовка" (с). Если ты на нулевом уровне - сигналку ты все равно не соберешь, так что начинай учится сразу. без подсказок.

practikant
Offline
Зарегистрирован: 21.06.2018

Ну раз так огромное спасибо и за это. Займемся самообразованием. 

practikant
Offline
Зарегистрирован: 21.06.2018
#include <SoftwareSerial.h>
 
SoftwareSerial smsSerial(10,11); // выводы RX и TX для общения с модулем SIM800L
#define sense_pin 3
 
String number ="+38хххххххххх"; // Замените эти цифры на номер телефона для отправки сообщений
 
void setup()
 
{
 
   Serial.begin(9600);
 
  smsSerial.begin(9600);
 
   pinMode(sense_pin,INPUT);
 
   digitalWrite(sense_pin,LOW);
 
 
 
}
 
void loop()
 
{
 
   // Отправлять сообщения всякий раз когда sense_pin устанавливается в 1
 
   if (digitalRead(sense_pin)==HIGH) // Проверка если sense_pin установлен в 1
 
   {
 
     smsSerial.println("AT+CMGF=1"); // Установка текстового режима
 
      delay(150);
 
      smsSerial.println("AT+CMGS=\""+number+"\""); // Укажите номер получателя в международном формате, заменив 7 если это не Россия
 
      delay(150);
 
      smsSerial.print("Warning! SIM800L"); // Введите отправляемое сообщение
 
      delay(150);
 
      smsSerial.write((byte)0x1A); // Символ окончания сообщения 0x1A : эквивалентно Ctrl+z
 
      delay(50);
    
 
 
     
   }
 
}
 вот скетч может кому пригодится.
practikant
Offline
Зарегистрирован: 21.06.2018

И все же может кто допилит  счетчик? ......Гуглу пилю...Пробую все ..Если у самого получится выложу....

practikant
Offline
Зарегистрирован: 21.06.2018

Сигналку собрал.Все работает.В принципе и такая хавается,но хочется код допилить.

 

Morroc
Offline
Зарегистрирован: 24.10.2016

Если бы хотелось допилить - уже допилили бы. Вам же хочется чтобы кто то допилил :)

У вас уже есть условие, "останавливающее код", вот оно - if (digitalRead(sense_pin)==HIGH) и вам в него нужно добавить логику типа (уже_отправлено == true) и после отправки ближе к концу кода сделать уже_отправлено = true;

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Остановить можно сделав "Код, СТОЙ!!! Раз-два."

и вызвать abort();