GSM-SMS Problem

Hallo,

Ich habe ein Riesengroßes Problem.
Weiter unten 2 Sketche die zu 100% funktionieren, sobald ich die 2 zusammen füge hängt sich der Sketch nach dem ersten Anruf auf!!!
Könnte sich bitte jemand erbarmen mir den richtigen weg zu zeigen....

Sketch1 (FUNKTIONIERT):

void loop() 
{
{ 
 ds18b20.requestTemperatures(); 
 float t = ds18b20.getTempCByIndex(0); 
 Serial.print("temperatur");
 Serial.print(t); 
 Serial.print(" *C\t"); 
 Serial.println(); 
}
 ds18b20.requestTemperatures(); 
 float t = ds18b20.getTempCByIndex(0); 
if ((t)>30 && SMSsentT1 == 0)
{
sms.beginSMS("+49152xxxxxx");
sms.print("temperatur");
sms.print(t);
sms.print("C");
sms.endSMS();
delay(1000);
SMSsentT1=1;
}
if ((t)<30 && SMSsentT1 == 1)
{

sms.beginSMS("+49152xxxxxx");
sms.print("temperatur");
sms.print(t);
sms.print("C");
sms.endSMS();
delay(1000);
SMSsentT1=0;
}

}

Sketch2 (FUNKTIONIERT):

void loop()
{
 switch (vcs.getvoiceCallStatus())
 {
   case IDLE_CALL:
     break;
   case RECEIVINGCALL:
     vcs.hangCall();
     delay(5000);
     ds18b20.requestTemperatures(); 
     float t = ds18b20.getTempCByIndex(0);
     sms.beginSMS("+49152xxxxxx");
     sms.print("temperatur");
     sms.print(t);
     sms.print("C");
     sms.endSMS();
     break;
   }
 delay(1000);
}

Kann mir jemand sagen wie ich beide Sketche elegant zusammenfügen kann?

So werden die Sketche nicht funktionieren.
Wo ist das Setup und die Deklaration?

Zeige uns deine komplette Version, wie du sie zusammengesetzt hast, inkl. Deklaration und Setup.

Und setze den Sketch in Code-Tags (Schaltfläche </>)

Und dokumentiere deinen Sketch, damit wir nicht alles erraten müssen.

Das die Sketche einzelnd funktionieren habe ich doch erwähnt...

LA331:
Das die Sketche einzelnd funktionieren habe ich doch erwähnt...

Mach ja sein, wenn du aber nur einen Teil postest und einen wichtigen Teil geheim hälst, können wir nicht helfen.
Und raten wollen wir nicht, das hilft keinem.

Also komplett liefern. Und auch zusammengesetzt und in Code-Tags!

Und dein Titel stimmt dann ja auch nicht. :wink:

Bitteschön:
in diesen hier (FUNKTIONIERT zu 100%):

#include <OneWire.h> 
#include <DallasTemperature.h>
#include <GSM.h>
#define PINNUMBER ""

GSM gsmAccess;
GSMVoiceCall vcs;
GSM_SMS sms;

char numtel[20];

int SMSsentT1 = 0;

#define PIN_DS18B20 8 
OneWire oneWire(PIN_DS18B20); 
DallasTemperature ds18b20(&oneWire);  

void setup() 
{
    pinMode(9, OUTPUT);
    delay(5000);
    digitalWrite(9, HIGH);   
    delay(1000);             
    digitalWrite(9, LOW);   
    delay(1000);
boolean notConnected = true;
while (notConnected)
{
if (gsmAccess.begin(PINNUMBER) == GSM_READY)
notConnected = false;
}
{     
  Serial.begin(9600);
  ds18b20.begin(); 
}
}  
 
void loop() 
{
{  
  ds18b20.requestTemperatures(); 
  float t = ds18b20.getTempCByIndex(0); 
 
  Serial.print("Vorlauftemperatur Kaelteanlage ");
  Serial.print(t); 
  Serial.print(" *C\t"); 
  Serial.println(); 
}
  ds18b20.requestTemperatures(); 
  float t = ds18b20.getTempCByIndex(0); 
if ((t)>30 && SMSsentT1 == 0)
{
sms.beginSMS("+49152xxxxxx");
sms.print("temperatur ");
sms.print(t);
sms.print("C");
sms.endSMS();

delay(1000);

SMSsentT1=1;
}
if ((t)<30 && SMSsentT1 == 1)
{
sms.beginSMS("+49152xxxxxx");
sms.print("temperatur ");
sms.print(t);
sms.print("C");
sms.endSMS();

delay(1000);

SMSsentT1=0;
}
}

möchte ich folgendes einfügen:

  switch (vcs.getvoiceCallStatus())
  {
    case IDLE_CALL:
      break;
    case RECEIVINGCALL:
      vcs.hangCall();
      delay(5000);
      ds18b20.requestTemperatures();
      float t = ds18b20.getTempCByIndex(0);
      sms.beginSMS("+49152xxxxxx");
      sms.print("temperatur");
      sms.print(t);
      sms.print("C");
      sms.endSMS();
      break;
    }
  delay(1000);

sobald das geschehen ist funktioniert nichts mehr.......

Wenn ich das richtig verstehe machst du zweimal das Gleiche. Entweder wenn die Temperatur einen Wert übersteigt oder wenn du anrufst. Du brauchst das nur einmal auszuführen und in deine If Anweisung machst du entweder T >30 oder RECEIVINGCALL.

Gruß

und wie würde das dann aussehen?

Kenn mich mit der Lib nicht aus und weiß nicht ob man RECEIVINGCALL einfach so vergleichen kann aber um den Sinn zu verstehen sollte es reichen.

if ((t)>30 && SMSsentT1 == 0 || vcs.getvoiceCallStatus() == "RECEIVINGCALL")

Und die delay solltest du auch vermeiden, wenn während einem delay ein Anruf reinkommt wird dieser evtl nicht bemerkt.

Wie Scherheinz schon schreibt, verwendest du den SMS-Code mehrfach, 4 mal nach der Erweiterung.

Setze den Teil in eine Funktion und rufe die Funktion jeweils vom Sensor-Sketch auf.

Beispiel:

void SMS_senden() {
sms.beginSMS("+49152xxxxxx");
sms.print("temperatur ");
sms.print(t);
sms.print("C");
sms.endSMS();
delay(1000);
SMSsentT1=0;
}

Die jeweiligen Variablen solltest du aber dann global vergeben.

Genau, so wäre es dann sauber gelöst. Wenn du mal mehr als nur eine Temperatur auslesen willst kannst du diese Vorgänge auch in eine extra Funktion packen und rufst sie nur noch nacheinander auf.

nicht ganz,

ich möchte eine SMS wenn die Temperatur Überschritten wird

ich möchte eine SMS wenn die Temperatur wieder im Normalbereich ist

und 3:
möchte ich jederzeit die Aktuelle Temperatur abrufen können

irgendwelche ideen?

Na genauso! Es ist egal wie oft und zu welcher Bedingung du die Funktion aufrufst.

Eine Funktion kannst du beliebig oft aus dem Sketch heraus aufrufen.
Egal ob ein Sensor oder ein Taster oder was auch immer.