Hallo zusammen,
Nachdem ich nun Snubber, Freilaufdioden und alles verbaut hatte und erneut Fehler aufgetreten sind habe ich mich dazu entschieden alles einmal zu Hause in Ruhe durchzutesten.
Ich habe jetzt die gesamte Steuerung zu Hause aufgebaut, die Sensoren wie Trockenlaufschutz etc. simuliere ich mit einem weiteren Arduino (Leonardo). Das heißt alle 30min. schaltet sich der Trockenlaufschutz ein und weitere 30min. später wieder aus. Das heißt an den Pins des Mega 2560 (die Hauptsteuerung) sind der Leonardo angeschlossen.
Das ganze funktioniert genau so wie es sein soll. Am ersten Abend also von Vorgestern auf Gestern lief alles reibungslos, bis um 0:20 Uhr plötzlich der Mega nicht mehr auf Empfangene SMS reagiert hatte. Hier kam wieder der wie Anfangs beschrieben aufhänger wo keine SMS mehr empfangen werden können. Nachdem ich fernab vom Brunnen bin kann es schon mal nicht an der Versorgung liegen!
Wohlgemerkt wird das ganze zu Hause über einen USB Hub versorgt (Serielle Schnittstelle) und parallel dazu mit einem Schaltnetzteil Netzteil.
Zeitgleich lasse ich mir alles per serielle Schnittstelle ausgeben. Auch hier konnte ich nichts feststellen, er hört plötzlich um 0:20 Uhr ebenfalls auf etwas auf die serielle Schnittstelle auszugeben.
Danach habe ich folgendes geändert:
- Ich habe statt SoftwareSerial Hardware Serial (Serial3) am Mega 2560 verwendet. Die verwendete Library ist (nach Anpassung) immer noch dieselbe wie weiter oben beschrieben.
- Die Baud RAte habe ich auf 9600Baud geändert um hier einen typischen Standardwert zu besitzen. Davor hatte ich 19200Baud.
-Die Puffergrüße von smsbuffer[] und smsin[] habe ich auf 160 Zeichen erhöht.
Das ganze rannte wieder von Gestern auf heute in der Nacht und erneut bekam ich um 0:15 Uhr herum den selben Fehler. Eben das der Arduino nicht mehr auf Empfangene SMSen reagierte. Als ob er immer einfrieren würde.
Das Interessante daran, ich habe den Testlauf bereits gegen Mittag gestartet (im Gegensatz zum Vortag Testlauf wo ich diesen erst um 21Uhr gestartet hatte) und es trat beinahe zur selben Uhrzeit dieser Fehler auf. Selbiges Problem trat ebenfalls am Brunnen um ca. Mitternacht auf, weshalb der PC schon mal ausscheiden würde als Fehlerquelle.
Der Auto-Reset wurde schon seit dem alles in Betrieb ist und im Brunnen verbaut wurde disabled (Pad am Mega 2560 Board cutted). An diesem kann es auch nicht liegen.
Kann es an der Bibliothek liegen oder der Art und Weise wie ich die SMS abrufe?
Denn am Beispiel-Sketch von Seeedstudio "Gprs SMSRead" ist folgendes zu lesen:
There are two methods to read SMS:
-
- GPRS_LoopHandle.ino -> in order to recieve "+CMTI: "SM""*
- may be you need to send this command to your shield: "AT+CNMI=2,2,0,0,0"*
-
- GPRS_SMSread.ino -> you have to check if there are any*
- UNREAD sms, and you don't need to check serial data continuosly*
Hier benutze ich die 2. Variante, eben diese welche auch im Beispiel Sketch verwendet wird.
Wäre über jeden Gedankengang dankbar!
Hier nochmal der gesamte Beispiel-Code von Seeedstudio (dem Hersteller meines GSM Moduls)
/*
GPRS SMS Read
This sketch is used to test seeeduino GPRS_Shield's reading SMS
function.To make it work, you should insert SIM card
to Seeeduino GPRS Shield,enjoy it!
There are two methods to read SMS:
1. GPRS_LoopHandle.ino -> in order to recieve "+CMTI: "SM""
may be you need to send this command to your shield: "AT+CNMI=2,2,0,0,0"
2. GPRS_SMSread.ino -> you have to check if there are any
UNREAD sms, and you don't need to check serial data continuosly
create on 2015/05/14, version: 1.0
by op2op2op2(op2op2op2@hotmail.com)
*/
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#define PIN_TX 7
#define PIN_RX 8
#define BAUDRATE 9600
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char phone[16];
char datetime[24];
GPRS gprs(PIN_TX,PIN_RX,BAUDRATE);//RX,TX,PWR,BaudRate
void setup() {
gprs.checkPowerUp();
Serial.begin(9600);
while(!gprs.init()) {
Serial.print("init error\r\n");
delay(1000);
}
delay(3000);
Serial.println("Init Success, please send SMS message to me!");
}
void loop() {
messageIndex = gprs.isSMSunread();
if (messageIndex > 0) { //At least, there is one UNREAD SMS
gprs.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//In order not to full SIM Memory, is better to delete it
gprs.deleteSMS(messageIndex);
Serial.print("From number: ");
Serial.println(phone);
Serial.print("Datetime: ");
Serial.println(datetime);
Serial.print("Recieved Message: ");
Serial.println(message);
}
}