Hey guys,
I have a problem with my program/code, which makes weird things after 24h. The program is a pump control which gets an message and then sets tasks to do.
The Problem is, after about 25-27hours suddenly an if-statement is true and sends out "Okay SniffenOn" and seconds later "Okay SniffenOff". It seems it doesn't delete the string "smsin", but why? Or could it a different problem?
Here the main part:
do
{
gprs.sendSMS(Brunnen2Num,"Pumpe1freigabe");
//Warte 40Sekunden
delay(40000);
//SMS Empfangen
ReceiveSMS(smsin);
if((strcmp("Kabelein", smsin)) == 0)
{
if(ing)
gprs.sendSMS(Testingenieur,"Kabel EIN");
Serial.println("Kabel EIN");
Kabel = 1;
deletesms(smsin);
break;
}
//Wenn "SniffenOn" von Testingenieur empfangen wird, wird "ing" auf 1 gesetzt und
//der gesamte SMS-Verkehr an Testingenieur übertragen, Standardmäßig ist ing = 0.
if((strcmp("SniffenOn", smsin)) == 0)
{
gprs.sendSMS(Testingenieur,"Okay SniffenOn");
ing = 1;
Serial.println("Sniffen EIN");
deletesms(smsin);
}
if((strcmp("SniffenOff", smsin)) == 0)
{
gprs.sendSMS(Testingenieur,"Okay SniffenOff");
ing = 0;
Serial.println("Sniffen AUS");
deletesms(smsin);
}
if((strcmp("OkayFreigabe", smsin)) == 0)
{
Serial.println("OkayFreigabe");
if(ing)
gprs.sendSMS(Testingenieur,"OkayFreigabe");
deletesms(smsin);
break;
}
wiederholen_trockenlaufaus++;
if(wiederholen_trockenlaufaus == 30)
{
//Sende SMS an Handy's, x1
gprs.sendSMS(Benutzer1Num,"Pumpstation Empfangsstoerung");
gprs.sendSMS(Benutzer2Num,"Pumpstation Empfangsstoerung");
gprs.sendSMS(Benutzer3Num,"Pumpstation Empfangsstoerung");
if(ing)
gprs.sendSMS(Testingenieur,"Pumpstation Empfangsstoerung");
}
}while(wiederholen_trockenlaufaus <= 30); //30 Versuche um SMS zu senden und eine Antwort zu erhalten!
With the subprogram deletesms:
void deletesms(char smstodelete[20])
{
for(int t=0;t<=19;t++)
{
//strcpy(sms_buffer[s][t],"0"); //Setze Inhalt von sms_buffer auf 0
smstodelete[t] = 0;
}
}
And ReceiveSMS
void ReceiveSMS(char sms_buffer[20])
{
int messageIndex = 0;
int message_length = 50; //Gibt an wieviele Zeichen in sms_buffer der Funktion gprs.readSMS gespeichert werden sollen
char phone[16];
char datetime[24];
char orig_sms[20];
messageIndex = gprs.isSMSunread();
if(messageIndex == -1)
{
strcpy(sms_buffer, "Error");
Serial.print("Error in receiving SMS = Code: -1");
}
if(messageIndex == 0) //keine SMS vorhanden - hier soll nichts passieren
{
strcpy(sms_buffer, "Error");
}
if(messageIndex > 0)
{
gprs.readSMS(messageIndex, orig_sms, message_length, phone, datetime);
gprs.deleteSMS(messageIndex);
//SMS zurückliefern, wenn gültige Nummer
if( ((strcmp(phone, Brunnen2Num)) == 0) || ((strcmp(phone, Testingenieur)) == 0) )
{
strcpy(sms_buffer, orig_sms);
}
else
{
strcpy(sms_buffer, "Error");
Serial.print("Error: Number is not valid");
}
}
}
Would be happy for every answer! Best regards