Управление Реле через СМС модуль 800L V.2
- Войдите на сайт для отправки комментариев
Чт, 09/07/2020 - 17:59
Добрый день, подскажите пожалуйста новичку. Делаю тестовый стенд по управлению реле через смс. Код работает но как результат вместо 1 смс о выполненном действии, отправляет смс до бесконечности, подскажите что не так в коде. Спасибо.
#include <SoftwareSerial.h>
#define PIN_RELAY 5
SoftwareSerial mySerial(4, 3);
char incomingByte;
String inputString;
void setup() {
pinMode(PIN_RELAY, OUTPUT);
digitalWrite(PIN_RELAY, HIGH);
Serial.begin(9600);
mySerial.begin(9600);
while(!mySerial.available()){
mySerial.println("AT");
delay(1000);
Serial.println("Connecting…");
}
Serial.println("Connected!");
mySerial.println("AT+CMGF=1");
delay(1000);
mySerial.println("AT+CNMI=1,2,0,0,0");
delay(1000);
mySerial.println("AT+CMGL=\"REC UNREAD\"");
}
void loop()
{
if(mySerial.available())
{
delay(100);
while(mySerial.available())
{
incomingByte = mySerial.read();
inputString += incomingByte;
}
delay(10);
Serial.println(inputString);
inputString.toUpperCase();
if (inputString.indexOf("ON") > -1)
{
digitalWrite(PIN_RELAY, LOW);
sms(String("Heater - ON"), String("+79650474047"));
}
if (inputString.indexOf("OFF") > -1)
{
digitalWrite(PIN_RELAY, HIGH);
sms(String("Heater - OFF"), String("+79650474047"));
}
delay(50);
if (inputString.indexOf("OK") == -1)
{
mySerial.println("AT+CMGDA=\"DEL ALL\"");
delay(1000);
}
inputString = "";
}
}
void sms(String text, String phone)
{
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);
}
#include <SoftwareSerial.h> #define PIN_RELAY 5 SoftwareSerial mySerial(4, 3); char incomingByte; String inputString; void setup() { pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); Serial.begin(9600); mySerial.begin(9600); while(!mySerial.available()){ mySerial.println("AT"); delay(1000); Serial.println("Connecting…"); } Serial.println("Connected!"); mySerial.println("AT+CMGF=1"); delay(1000); mySerial.println("AT+CNMI=1,2,0,0,0"); delay(1000); mySerial.println("AT+CMGL=\"REC UNREAD\""); } void loop() { if(mySerial.available()) { delay(100); while(mySerial.available()) { incomingByte = mySerial.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); if (inputString.indexOf("ON") > -1) { digitalWrite(PIN_RELAY, LOW); sms(String("Heater - ON"), String("+7")); } if (inputString.indexOf("OFF") > -1) { digitalWrite(PIN_RELAY, HIGH); sms(String("Heater - OFF"), String("+7")); } delay(50); if (inputString.indexOf("OK") == -1) { mySerial.println("AT+CMGDA=\"DEL ALL\""); delay(1000); } inputString = ""; } } void sms(String text, String phone) { 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); }добавить некую переменную, при старте присваивать ей = 0, при отправке проверять не равна ли она =1, после отправки присвоить единичку.
При старте присваивать в setup или loop ?
Setup выполняется один раз при включении
void loop() { otpr = 0; if(mySerial.available()) { delay(100); while(mySerial.available()) { incomingByte = mySerial.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); if (inputString.indexOf("ON") > -1 && otpr == 0) { otpr == 1; digitalWrite(PIN_RELAY, LOW); sms(String("Heater - ON"), String("+7")); } delay (50); if (inputString.indexOf("OFF") > -1 && otpr == 0) { otpr == 1; digitalWrite(PIN_RELAY, HIGH); sms(String("Heater - OFF"), String("+7")); } delay(50); if (inputString.indexOf("OK") == -1) { mySerial.println("AT+CMGDA=\"DEL ALL\""); delay(200); } inputString = ""; } } void sms(String text, String phone) { Serial.println("SMS send started"); mySerial.println("AT+CMGS=\"" + phone + "\""); delay(200); mySerial.print(text); delay(200); mySerial.print((char)26); delay(200); Serial.println("SMS send complete"); delay(200); }Теперь все работает, но дублируются сообщения в мониторе порта и ответная смс приходит только через 1 мин, а раньше сразу приходила