Реле с автоотключение после получения СМС

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

#include <Wire.h>
#include <SoftwareSerial.h>


#define Rele2 11


#define INTERVAL 10000 * 3
#define INTERVAL2 20000 * 8


String phoneNumber = ("+79хххххххххх");
SoftwareSerial mySerial(7, 8);

void setup() {
  pinMode(Rele2, OUTPUT);
  digitalWrite(Rele2, HIGH);
  delay(100);
  pinMode(pinPower, INPUT);
  delay(1000);
  pinMode(9, OUTPUT);  // Атозапуск SIM900 при первом всключении
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  digitalWrite(9, LOW);
  delay(3000);

  Serial.begin(9600);
  delay(1000);
  mySerial.begin(9600);

  while (!mySerial.available()) {     // Зацикливаем и ждем инициализацию SIM900
    mySerial.println("AT");           // Отправка команды AT
    delay(1000);                      // Пауза
    Serial.println("Connecting...");  // Печатаем текст
  }
  Serial.println("Connected!");           // Печатаем текст
  mySerial.println("AT+CMGF=1");          // Отправка команды AT+CMGF=1
  delay(1000);                            // Пауза
  mySerial.println("AT+CNMI=1,2,0,0,0");  // Отправка команды AT+CNMI=1,2,0,0,0
  delay(1000);                            // Пауза
  mySerial.println("AT+CMGL=\"REC UNREAD\"");

  delay(1000);

void loop() {
if (inputString.indexOf("POLIV1") > -1) {
    digitalWrite(Rele2, LOW);
    }else if (millis() - waitTime > INTERVAL2 ) {  // конец полива
    digitalWrite(Rele2, HIGH);
    waitTime = 0;
    sms(String("Rele2 - PolifConch"), phoneNumber);
    }
 
delay(50);

    if (inputString.indexOf("OK") == -1) {
      mySerial.println("AT+CMGDA=\"DEL ALL\"");
      delay(1000);
    }

    inputString = "";
  }

void sms(String text, String phone)  // Процедура Отправка SMS

{
  Serial.println("SMS send started");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(500);
  mySerial.print(text);
  delay(500);
  mySerial.print((char)26);
  delay(500);
  Serial.println("SMS send complete");
  delay(2000);
}

А если так?

  static uint32_t waitTime =0;
  if (inputString.indexOf("POLIV1") > -1)
  {
    digitalWrite(Rele2, LOW);
    waitTime = millis();
  }
  if (!digitalRead(Rele2) && millis() - waitTime > INTERVAL2)
  { // конец полива
    digitalWrite(Rele2, HIGH);
    sms(String("Rele2 - PolifConch"), phoneNumber);
  }
1 лайк

Кстати, изначально код вообще не компилируется, не объявлена переменная waitTime

1 лайк

Эммм, это троллинг? Этот скетч хоть как-то работает? Ну тогда удачи

1 лайк

Он. Не. Компилируется. Если вы выкладываете сюда один код, а экспериментируете с другим, то это как минимум неуважение к сообществу. Или троллинг. Так что удачи вам в ваших экспериментах

1 лайк

Дружище, здесь сохраняется история редактирования постов. И прекрасно видно, что сейчас в твоем посте совсем не тот код, который я проверял. Троллишь? Маладес!

3 лайка