Der Empfang von SMS mit GSM-und LED-Steuerung mit Arduino
Hat jemand mit einer Lösung kommen, die die oben genannten problem?
Sind wir mit Arduino Duemilanove und SIM-900 GSM-Modul (http://robokits.co.in/shop/index.php?main_page=product_info&products_id=303)
Wir haben versucht, die arbeiten auf dem ähnlichen problem der Blitz-LEDs von port 9-12, wenn wir eine sms senden #aibicidi, wobei i = 0 oder 1, 0 =off, 1=on. E. g. #a1b1c1d1 und schaltet alle LEDs.
Wenn wir hochladen, den code, und führen Sie es über den seriellen monitor eingeben und die #a1b1c1d1 in den serial monitor, können wir sehen, dass alle LEDs aufleuchten. Aber wenn wir das versenden der sms mit Inhalt "#a1b1c1d1", die wir nicht sehen, keine Funktion der LEDs.
Es wäre toll, wenn jemand kann geben einige Hinweise über die gleichen.
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 LEDs 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 war in der Lage, zur Lösung des oben beschriebenen Zustand problem. Bekommen Sie auf diesen link, um zu dem letzten post: edaboard.com/thread284929.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten verwenden keine Verzögerung
Dies ist weder notwendig noch zuverlässig. Anstatt zu warten, einige zufällige Zeit, können Sie überprüfen Sie die Netzwerk-status mit
AT+CFUN
- und/oderAT+COPS
. Wenn das GSM-Modul ist bereits an ein Netzwerk angeschlossen, beim öffnen der seriellen Verbindung, ist es eine Verschwendung von Zeit so. Und wenn nicht befestigt, sollten Sie warten, die explizit das passieren kann (polling CFUN/COPS oder die AktivierungAT+CREG
), sonst riskieren Sie, zu warten kurze Zeit. Finden Sie die 27.007 - Spezifikation für weitere Informationen über diese Befehle.Sekunde verwenden Sie keine Verzögerung
Bitte nicht, schreiben Sie code wie diesen. Sehen diese Antwort auf, warum die Verzögerung ist so eine schlechte Idee, und diese Antwort für die Anregung, um zu behandeln, wie richtig.