Guten Tag,
möchte meinen Sketch um einen Teil erweitern. Ich möchte, das wenn ich eine SMS mit "START" oder "STOP" an das GSM Modul sende, den Loop unterbrechen und wieder starten kann. Nun zu meiner Frage: Wie kann ich eine SMS empfangen und diese auch lesen lassen sodass er Start und Stop erkennen kann? Den restlichen Teil kann ich selbst, nur wie funktioniert das? Wäre nett, wenn mir jemand helfen könnte. Mit freundlichen Grüßen
Wieso willst du deine Loop unterbrechen ?
Dir ist hoffentlich klar, wenn die Loop nicht mehr läuft, kannst du au nichts mehr machen, also nicht einfach wieder starten.
Damit dein Aruino funktioniert, muss die Loop immer weiter laufen, so schnell wie möglich,
Beschreibe mal, was genau du machen möchtest.
Und hier findest du ein Beispiel, wie du eine SMS vom TC35 empfangen und auswerten kannst.
Ich möchte, wenn ich "Start" bzw. "Stop" als SMS an mein GSM Modul sende, dass das Programm unterbricht, wie wenn ich den Stecker ziehen würde. Mit "Start" funktioniert dann wieder alles weiter, wie gewohnt.
Gruß
Wie soll das unterbrochene Programm ("wie wenn ich den Stecker ziehe") erkennen, dass da START gesendet wird?
Du bist auf dem falschen Denkpfad.
Gruß Tommy
Sturmfront:
Ich möchte, wenn ich "Start" bzw. "Stop" als SMS an mein GSM Modul sende, dass das Programm unterbricht, wie wenn ich den Stecker ziehen würde. Mit "Start" funktioniert dann wieder alles weiter, wie gewohnt.
Gruß
Das geht nicht mit Loop unterbrechen.
Da musst du eine Abfrage einbauen, die verhindert, dass normale Funktionen weiter ausgeführt werden.
Die Loop muss aber weiter laufen.
Mit Start gelangst du dann wieder durch eine Abfrage in deine normale Funktion.
Stimmt. Ich kann ja eine boolean einbauen, der im Loop, falls Start gesendet wird ein true gibt und falls Stop gesendet wird ein false gibt. Dann kann ich ja bei der normalen funktion abfragen, ob die Boolean true oder false hat und somit dann das Programm weiterlaufen kann oder stoppen soll. Geht das so?
Gruß
Grundlegend ja, aber verabschiede Dich vom Gedanken "Stoppen/Weiterlaufen". Der führt Dich in die Irre.
Denke lieber in "Ausführen/nicht ausführen".
Gruß Tommy
Sturmfront:
Stimmt. Ich kann ja eine boolean einbauen, der im Loop, falls Start gesendet wird ein true gibt und falls Stop gesendet wird ein false gibt. Dann kann ich ja bei der normalen funktion abfragen, ob die Boolean true oder false hat und somit dann das Programm weiterlaufen kann oder stoppen soll. Geht das so?
Ja, fast.
Tommy hat es ja schon angeschnitten.
Du kannst nicht dein Programm sondern deine entsprechende Funktion damit anhalten bzw. umgehen.
Okay danke für den Tipp. Bei dem Thread den @HotSystems mir geschickt hat. Ich habe mir jetzt folgendes zusammengebastelt.
#include <SoftwareSerial.h>
const byte rxPin = 4;
const byte txPin = 5;
const byte button = 2;
const byte button2 = 7;
const byte button3 = 8;
boolean magnetkontakt = false;
boolean magnetkontakt2 = false;
boolean magnetkontakt3 = false;
char gsm=0;
boolean startstop = true;
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(button, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
}
void loop() {
while (mySerial.available() > 0)
{
char gsm = gsmSerial.read();
if (gsm == "START")
{
boolean startstop = true;
}
if (gsm == "STOP") {
boolean startstop = false;
}
}
if (digitalRead(button) == HIGH && magnetkontakt == false && startstop == true) {
SendTextMessage();
ShowSerialData();
magnetkontakt = true;
}
else
if (digitalRead(button) == LOW){
magnetkontakt = false;
}
if (digitalRead(button2) == HIGH && magnetkontakt2 == false && startstop == true) {
SendTextMessage2();
ShowSerialData();
magnetkontakt2 = true;
}
else
if (digitalRead(button2) == LOW){
magnetkontakt2 = false;
}
if (digitalRead(button3) == HIGH && magnetkontakt3 == false && startstop == true) {
SendTextMessage3();
ShowSerialData();
magnetkontakt3 = true;
}
else
if (digitalRead(button3) == LOW){
magnetkontakt3 = false;
}
}
void SendTextMessage() {
mySerial.print("AT+CMGF=1\r");
delay(300);
mySerial.println("AT+CMGS=\"NUMMER\"");
delay(300);
mySerial.print("Alarm PV");
mySerial.print("\r");
delay(300);
mySerial.println((char)26);
delay(2000);
}
void SendTextMessage2() {
mySerial.print("AT+CMGF=1\r");
delay(300);
mySerial.println("AT+CMGS=\"NUMMER\"");
delay(300);
mySerial.print("Alarm BW2");
mySerial.print("\r");
delay(300);
mySerial.println((char)26);
delay(2000);
}
void SendTextMessage3() {
mySerial.print("AT+CMGF=1\r");
delay(300);
mySerial.println("AT+CMGS=\"NUMMER\"");
delay(300);
mySerial.print("Alarm BW1");
mySerial.print("\r");
delay(300);
mySerial.println((char)26);
delay(2000);
}
void ShowSerialData() {
while (mySerial.available() != 0)
Serial.write(mySerial.read());
}
Hast du denn meinen Link in Post #1 schon angesehen ?
da gibt es Vorschläge, wie du die SMS einlesen kannst.
Das geht nicht einfach nur mit einer Anweisung. Lies dir das mal durch.
Ich verstehe den Code aus dem Thread von Post#1 nicht so ganz. Wie lese ich die SMS ein? Da wurde es mit einem char gemacht, habe ich ja auch. Aber den rest verstehe ich nicht. Gruß