SMS mit GSM empfangen und LED mit Arduino steuern

Hat jemand eine Lösung für das oben genannte Problem gefunden?

Wir verwenden Arduino Duemilanove und SIM 900 GSM-Modul ( http://robokits.co.in/shop/index.php?main_page=product_info&products_id=303 )

Wir haben versucht, an dem ähnlichen Problem von Blitz-LEDs von Port 9-12 zu arbeiten, wenn wir eine SMS #aibicidi senden, wobei i = 0 oder 1, 0 = aus, 1 = an. Z.B. #a1b1c1d1 schaltet alle Leds ein.

Wenn wir den Code hochladen und über den seriellen Monitor ausführen und # a1b1c1d1 in den seriellen Monitor eingeben, können wir sehen, dass alle LEDs aufleuchten. Aber wenn wir die SMS mit dem Inhalt „#a1b1c1d1“ senden, sehen wir keine Funktion der LEDs.

Es wäre toll, wenn jemand eine Anleitung dazu geben könnte.

 char inchar; //Will hold the incoming character from the Serial Port.


 int led1 = 9;
 int led2 = 10;
 int led3 = 11;
 int led4 = 12;

 void setup()
 {
 // prepare the digital output pins
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 //Initialize GSM module serial port for communication.


 Serial.begin(9600);
 delay(3000); // give time for GSM module to register on network etc.
 Serial.println("AT+CMGF=1"); // set SMS mode to text
 delay(200);
 Serial.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt 
 delay(200);
 }

 void loop() 
 {
 //If #a1b1c1d1 comes as sms, all led's should light up.
 if(Serial.available() >0)
 {
 inchar=Serial.read(); 
 if (inchar=='#')
   {
   delay(10);
   inchar=Serial.read(); 

 //first led
   if (inchar=='a')
     {
   delay(10);
   inchar=Serial.read();

 if (inchar=='0')
   {
   digitalWrite(led1, LOW);
   } 
 else if (inchar=='1')
   {
   digitalWrite(led1, HIGH);
   }
 delay(10);


 //Second led
 inchar=Serial.read(); 

 if (inchar=='b')
   {
   inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led2, LOW);
 } 

 else if (inchar=='1')
 {
 digitalWrite(led2, HIGH);
 }
 delay(10);

 // Third led
 inchar=Serial.read(); 
 if (inchar=='c')
 {
 inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led3, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led3, HIGH);
 }
 delay(10);

 //Fourth led

 inchar=Serial.read(); 
 if (inchar=='d')
 {
 delay(10);
 inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led4, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led4, HIGH);
 }
 delay(10);
 }
 }
 Serial.println("AT+CMGD=1,4"); // delete all SMS
 }
 }
 }
 }
 }
Ich konnte das obige Zustandsproblem lösen. Gehen Sie zu diesem Link, zum letzten Beitrag: edaboard.com/thread284929.html
Vielleicht möchten Sie Ihre Erfahrung als Antwort niederschreiben, den Inhalt Ihres bereitgestellten Links ein wenig erläutern und dann Ihre eigene Antwort akzeptieren. Natürlich keine Nur-Link-Antwort, da diese dieser Site wenig Wert hinzufügen und bedeutungslos werden, wenn das Linkziel den Standort ändert oder die Site irgendwann stirbt.

Antworten (2)

Ihr Code ist gut für serielle Terminals, aber nicht für GSM-Modems. Es wird immer ein Befehl in Form von AT verwendet. Verwenden Sie AT + CMGR = 1, um die Nachricht zu lesen .... senden Sie diesen Befehl an das Modem und sehen Sie sich die Antwort an ....

Dadurch würde 1 Nachricht abgerufen, aber ohne sie zu löschen, würde dieselbe Nachricht in der Warteschlange verbleiben und die Anwendung ersticken.

Führen Sie die Änderung AT+CNMI=2,2,0,0,0anstelle AT+CNMI=3,3,0,0unseres vorherigen Codes durch. Dann funktioniert das Relais.

Worauf in aller Welt bezieht sich "unser bisheriger Kodex"?
@Dave Tweed Es ist ein Verweis auf eine Antwort in einem Thread im Board, auf den in dem von OP zu seinem eigenen Beitrag geposteten Kommentar verwiesen wird. Ganz einfacher alter Kerl. LOL.