Условия с GSM-модулем SIM900 не выполняются

Я выполняю этот код для управления светодиодом с помощью сообщения GSM SIM900, но есть две проблемы. Во-первых, он иногда получает сообщения, а иногда нет. Во-вторых, он не выполняет условия if, которые присутствуют в сообщении GSM при его получении.

Возникла ли проблема с моим GSM-модулем? Кто-нибудь может помочь?

#include <SoftwareSerial.h>
SoftwareSerial gsm(9,10);
String msg;
const int LED = 13;

void setup() {
  gsm.begin(9600);
  Serial.begin(9600);
  Serial.println("PUMP CONTROL");
  Serial.println("t : to receive text");
  delay(1000);

  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
}

void loop() {
  if (Serial.available()>0)
  switch(Serial.read())
  {
    case 't':
    showSMS();
    break;
  }

  while(gsm.available() > 0)
  {
    Serial.write(gsm.read());
  }
  if ( msg == "ON")
  {
    Serial.println("ON");
    digitalWrite(LED, HIGH);
     Serial.println("ON1");
    delay(1000);
  } else if (msg == "OFF")
  {
    digitalWrite(LED, LOW);
    delay(1000);
  }
  if(msg != "") msg = "";
}

void showSMS()
{
 gsm.print("AT+CMGF=1\r");
 gsm.print("AT+CNMI=2,2,0,0,0\r");
 delay(1000);
 msg = "";
 while(gsm.available() > 0)
 {
  msg += gsm.read();
 }
 Serial.println(msg);
}

, 👍0

Обсуждение

Есть несколько основных команд, которые следует выполнить перед проверкой сообщений. Нажмите **AT\r\n** и проверьте статус сети, доступен или нет, и есть еще кое-что., @Vaibhav


1 ответ


Лучший ответ:

1

Я решил проблемы с условиями, создав условие с помощью ASCII-кода ON и OFF.

Я заменил:

if ( msg == “ON”) 

с

if(msg.indexOf("ON")>=0) 

и заменено:

else if (msg == "OFF")

с

if(msg.indexOf("OFF")>=0) 
,