GSM Steuerung

Moin,

erstmal bin ich absolut neu hier. Hab meinen Arduino Leonardo + GSM-Shield 2 + Relay-Shield seit einer Woche und verzweifel etwas an der Programmiersprache da ich sonst nur logische Funktionen auf Siemens LOGO schreibe.

Meine Aufgabe: mit dem Arduino per SMS-Befehle die Relais steuern. Hab mir dazu diesen GSM_SMS_RECEIVED sketch geladen und einfach den Output hinzugefügt und dann hat das Relay auch angeschalten, nur aus ging es dann nie wieder^^.
Desweiteren muss ich die eingänge abfragen ob dort High-Signale anliegen. Wenn HIGH anliegt soll es mir eine SMS schicken.
Und später soll mir das Teil die Daten mal irgendwann an nen Server senden. Aber das liegt noch etwas in der Ferne.

Brauch eigentlich nur mal ne Starthilfestellung.

Wie sollen wir denn erkennen, wo der Fehler ist, wenn alles geheim ist.
Poste uns den Sketch und das Schaltbild.
Den Sketch in Code-Tags (Schaltfläche </>) posten.

<

// include the GSM library
#include <GSM.h>

// PIN Number for the SIM
#define PINNUMBER “”

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

// Array to hold the number a SMS is retreived from
char senderNumber[20];

int Pumpe = 13;
int Generator = 12;
int Reset = 11;
int KBA = 10;
int Pmax = 9;
int Pmin = 7;
int Trockenlauf = 6;

void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
//hier legst du fest das er nur arbeitet wenn Serial dran ist!!!
}

{
// initialize digital pin 13 as an output.
pinMode(Pumpe, OUTPUT);
// initialize digital pin 12 as an output.
pinMode(Generator, OUTPUT);
// initialize digital pin 11 as an output.
pinMode(Reset, OUTPUT);
// initialize digital pin 10 as an output.
pinMode(KBA, OUTPUT);
// initialize digital pin 9 as an input.
pinMode(Pmax, INPUT);
// initialize digital pin 7 as an input.
pinMode(Pmin, INPUT);
// initialize digital pin 6 as an input.
pinMode(Trockenlauf, INPUT);
}

Serial.println(“SMS Messages Receiver”);

// connection state
boolean notConnected = true;

// Start GSM connection
while (notConnected) {
if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
notConnected = false;
} else {
Serial.println(“Not connected”);
delay(1000);
}
}

Serial.println(“GSM initialized”);
Serial.println(“Waiting for messages”);
}

void loop() {
char c;
String ausgabe;

// If there are any SMSs available()
if (sms.available()> 0) {
int h=sms.available();
Serial.println(“Message received from:”);

for (int i=0;i<h;i++){
ausgabe += (char)sms.read();
}

// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);

// An example of message disposal
// Any messages starting with # should be discarded
if (sms.peek() == ‘#’) {
Serial.println(“Discarded SMS”);
sms.flush();

}

/// Read message bytes and print them
while (c = sms.read())
ausgabe += c;
{
/
if (ausgabe == “Pumpe an”)
{
digitalWrite(Pumpe , HIGH);
Serial.print(ausgabe);
}
else if (ausgabe == “Pumpe aus”)
{
digitalWrite(Pumpe , LOW);
Serial.print(ausgabe);
}
else
{
Serial.println(c);
Serial.println(“falscher Parameter”);
}
ausgabe = “”;
/}/

Serial.println("\nEND OF MESSAGE");

// Delete message from modem memory
sms.flush();
Serial.println(“MESSAGE DELETED”);
}

delay(1000);

}

Du solltest die Schaltfläche “</>” verwenden, nicht die Tasten am PC.
Ändere das bitte, so kann ich den Sketch am Tablet nicht lesen.
Und das Schaltbild sehe ich auch nicht.

Sorry mein Fehler…die Schaltfläche gabs bei Quick reply nicht^^

// include the GSM library
#include <GSM.h>

// PIN Number for the SIM
#define PINNUMBER ""

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

// Array to hold the number a SMS is retreived from
char senderNumber[20];

int Pumpe = 13;
int Generator = 12;
int Reset = 11;
int KBA = 10;
int Pmax = 9;
int Pmin = 7;
int Trockenlauf = 6;

void setup() {
 // initialize serial communications and wait for port to open:
 Serial.begin(9600);
 while (!Serial) {
   ; // wait for serial port to connect. Needed for native USB port only
   //hier legst du fest das er nur arbeitet wenn Serial dran ist!!!!
 }

 {
   // initialize digital pin 13 as an output.
   pinMode(Pumpe, OUTPUT);
   // initialize digital pin 12 as an output.
   pinMode(Generator, OUTPUT);
   // initialize digital pin 11 as an output.
   pinMode(Reset, OUTPUT);
   // initialize digital pin 10 as an output.
   pinMode(KBA, OUTPUT);
   // initialize digital pin 9 as an input.
   pinMode(Pmax, INPUT);
   // initialize digital pin 7 as an input.
   pinMode(Pmin, INPUT);
   // initialize digital pin 6 as an input.
   pinMode(Trockenlauf, INPUT);
 }


 Serial.println("SMS Messages Receiver");


 // connection state
 boolean notConnected = true;

 // Start GSM connection
 while (notConnected) {
   if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
     notConnected = false;
   } else {
     Serial.println("Not connected");
     delay(1000);
   }
 }

 Serial.println("GSM initialized");
 Serial.println("Waiting for messages");
}

void loop() {
 char c;
 String ausgabe;


 // If there are any SMSs available()
 if (sms.available()> 0) {
   int h=sms.available();
   Serial.println("Message received from:");
   
   for (int i=0;i<h;i++){
   ausgabe += (char)sms.read();
   }
   
   // Get remote number
   sms.remoteNumber(senderNumber, 20);
   Serial.println(senderNumber);

   // An example of message disposal
   // Any messages starting with # should be discarded
   if (sms.peek() == '#') {
     Serial.println("Discarded SMS");
     sms.flush();

     
   }

   /*// Read message bytes and print them
   while (c = sms.read())
     ausgabe += c;
   {*/
     if (ausgabe == "Pumpe an")
     {
       digitalWrite(Pumpe , HIGH);
       Serial.print(ausgabe);
     }
     else if (ausgabe == "Pumpe aus")
     {
       digitalWrite(Pumpe , LOW);
       Serial.print(ausgabe);
     }
     else
     {
       Serial.println(c);
       Serial.println("falscher Parameter");
     }
     ausgabe = "";
   /*}*/

   Serial.println("\nEND OF MESSAGE");

   // Delete message from modem memory
   sms.flush();
   Serial.println("MESSAGE DELETED");
 }

 delay(1000);



}

Was zeigt denn der SerialMonitor jeweils bei dieser Ausgabe an?

Serial.print(ausgabe);

Ich könnte mir auch vorstellen, du hast etwas falsch verdrahtet.

er zeigt "Falscher Parameter" an.
danach ne nummer wo er immer nullen hinten ransetzt.

Hab das GSM-Shield auf den Leonardo aufgesteckt und die Brücke zwischen Pin 2 und 8 gezogen. und oben drauf ist das Relai-Shield

Das heißt, es kommen immer falsche Daten am GSM an.
Dann solltest du dich erst mal darum kümmern, das die gesendeten Daten auch ankommen und lesbar sind.

Und da du das Relais auf Pin 13 hast, wird es entsprechend der Onboard-Led auch so geschaltet.

Hast du eine externe Stromversorgung über ein kräftiges Steckernetzteil, oder versuchst du dein Konstrukt aus GSM und Relaisschild per USB oder über den auf dem Arduino verbauten Stabi zu versorgen. Die beiden letzteren Varianten sind zum Scheitern verurteilt, da so ein GSM Shield schon mal Spitzen von 2A auf der 5V Leitung ziehen kann (steht im Datenblatt) der Regler auf dem Arduino macht 100 mA und ein USB Port normalerweise 500 mA.
Wenn die Hardware "nö" sagt, kannst du dir einen Wolf im Code suchen :smiling_imp: