SMS управление релле, уходит в цикл
- Войдите на сайт для отправки комментариев
Пт, 30/10/2020 - 12:26
Добрый день!
Есть: SIM800L, arduino nano, 1 канальное релле
Задача: с помощью смс на время включать релле (использую чтобы удалённо перегружать роутер путём отключения питания)
Помогите понять, что в коде не так. После отправки смс, релле срабатывает, приходит смс отчёт, что всё ок, и после этого включение релле и отправка смс отчёта уходит в цикл. Такое ощущение, что не очищаются смс, но не могу понять, что не так.
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX char incomingByte; String inputString; int relay_1 = A0; // Вывод управления реле 1 void setup() { pinMode(relay_1, OUTPUT); // Установим вывод как выход digitalWrite(relay_1, HIGH); // Устанавливаем высокий уровень Serial.begin(9600); mySerial.begin(9600); while(!mySerial.available()){ // Зацикливаем и ждем инициализацию SIM800L mySerial.println("AT"); // Отправка команды AT delay(1000); // Пауза Serial.println("Connecting…"); // Печатаем текст } Serial.println("Connected!"); // Печатаем текст delay(2000); mySerial.println("AT+CSQ"); // Смотрим уровень сигнала, > 10 нормально delay(1000); 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+GSMBUSY=1"); // Запрет входящих звонков delay(1000); // Пауза mySerial.println("AT+CMGL=\"REC UNREAD\""); } void loop() { if(mySerial.available()){ // Проверяем, если есть доступные данные delay(100); // Пауза while(mySerial.available()){ // Проверяем, есть ли еще данные. incomingByte = mySerial.read(); // Считываем байт и записываем в переменную incomingByte inputString += incomingByte; // Записываем считанный байт в массив inputString } delay(10); // Пауза Serial.println(inputString); // Отправка в "Мониторинг порта" считанные данные inputString.toUpperCase(); // Меняем все буквы на заглавные if (inputString.indexOf("RESTART") > -1){ // Проверяем полученные данные, если RESTART включаем реле 1 digitalWrite(relay_1, LOW); delay(5000); digitalWrite(relay_1, HIGH); delay(50); sms(String("OK Moden restarted"), String("+ХХХХХХХХХХХХ")); // Отправка SMS } delay(50); if (inputString.indexOf("OK") == -1){ mySerial.println("AT+CMGD=4"); //Удаление всех смс 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); }
Такое ощущение, что не очищаются смс, но не могу понять, что не так.
не там ищете. Переменную inputstring кто за вас будет чистить?
Переменную inputstring кто за вас будет чистить?
это в коде, не так?
это в коде, не так?
упс, просмотрел.
Тогда такой вопрос - когда код "уходит в цикл" - оператор принт в строчке 38 что-нибудь выводит на печать?
Тогда такой вопрос - когда код "уходит в цикл" - оператор принт в строчке 38 что-нибудь выводит на печать?
Вот, что выводит:
Попробуйте управлять реле, может лучше получится.
Попробуйте управлять реле, может лучше получится.
Не совсем понял, что вы имеете в виду?
Я имею в виду общий подход к делу - сначала нужно изучить матчасть. Нельзя кидаться управлять устройством, даже не зная как оно называется. Это не случайная опечатка - Вы везде пишете "релле".
а в строке 48 точно должно быть == -1 ? Может "не равно" ? - что-то не совсем понимаю логику
а в строке 48 точно должно быть == -1 ? Может "не равно" ? - что-то не совсем понимаю логику
Мне тоже не совсем понятна эта часть, но везде в интернете в аналогичных проектах используется эта часть:
https://robotchip.ru/upravlenie-nagruzkoy-cherez-sms-gsm-i-arduino/
http://www.junradio.com/index/sms_upravljaemoe_rele_na_arduino/0-518
при команде CMGF = 1 - режим обычных СМС правильная команда удаления всех смс это CMGDA="DEL ALL"
не понятна логика - зачем читать только не прочитанные СМС а не все? зачем смотреть какой то приход при удалении СМС?
пришла команда - выполнили - очистили