Moin Leutz,
wie kann man es machen, dass eine Fehlermeldung ausgegeben wird wenn der Sensor nicht erkannt wurde?
zB kann ich mich erinnern dass da -125° angezeigt hatte wenn GND nicht angeschlossen war.
Ich möchte halt anstatt den -125° eine Fehlermeldung ausgeben und die Heizung ausschalten.
Du könntest doch den Wert auf -125 abfragen.
Oder auf der Library-Seite:
In den Beispielen "Alarm" die richtige Lösung finden.
Auf -127 und ±85 abfragen dacht ich auch schon,
Die Alarm Beispiele sind irgendwie nicht das wahre.
Ich bin jetzt nicht am Rechner, glaube aber, dass ich bei mir eine Prüfung eingebaut habe, da ich noch eine Funkstrecke dazwischen habe, war mir das sicherer.
Ich werde das mal checken und posten.
Ja, wie vermutet, ich habe es so gemacht.
if (Sensor_Value2 == -127.00) // Fehlermeldung wenn Sensor (DS18B20) defekt!
{
Error_Msg = ("Fehler Tmp-Sensor");
}
else
Dass funktioniert
// *********************************************************************
void LCDML_BACK_setup(LCDML_BACKEND_sensor_check) {}
// *********************************************************************
boolean LCDML_BACK_loop(LCDML_BACKEND_sensor_check)
{
if (sensors.getTempCByIndex(0) <= -127 )
{
Serial.println(F("SENSOR RPRÜFEN <= -127"));
}
if (sensors.getTempCByIndex(0) >= 85 )
{
Serial.println(F("SENSOR RPRÜFEN >= 85"));
}
// else LCDML_BACK_reset(LCDML_BACKEND_sensor_check);
return false; // return false = go to first backend function and check time // return true = go to next backend function and check time
}
// define backend function
#define _LCDML_BACK_cnt 3 // last backend function id
LCDML_BACK_init(_LCDML_BACK_cnt);
// menu function and control function
LCDML_BACK_new_timebased_dynamic (0 , ( 20UL ) , _LCDML_start , LCDML_BACKEND_control);
LCDML_BACK_new_timebased_dynamic (1 , ( 1000UL ) , _LCDML_stop , LCDML_BACKEND_menu);
LCDML_BACK_new_timebased_static (3 , ( 5000UL ) , _LCDML_start , LCDML_BACKEND_temp_holen);
LCDML_BACK_new_timebased_static (2 , ( 5000UL ) , _LCDML_start , LCDML_BACKEND_sensor_check);
Da ich aber 2 sensoren habe, würd ich es gern so machen
// *********************************************************************
void LCDML_BACK_setup(LCDML_BACKEND_sensor_check) {}
// *********************************************************************
boolean LCDML_BACK_loop(LCDML_BACKEND_sensor_check)
{
if (sensors.getTempCByIndex(1) >= 85 || sensors.getTempCByIndex(1) <= -127)
{
Serial.println(F("OBEREN SENSOR PRÜFEN"));
}
if (sensors.getTempCByIndex(0) >= 85 || sensors.getTempCByIndex(0) <= -127)
{
Serial.println(F("UNTEREN SENSOR PRÜFEN"));
}
return false; // return false = go to first backend function and check time // return true = go to next backend function and check time
}
Das mit den -127 abfragen ist sicherlich kein Problem. Was mich am DS18B20 stört, das bei Fehler in der Kommunikation +85 ausgegeben wird.
Wer hat sich sowas ausgedacht? Das kann man leider nicht als Fehler abfragen denn die +85 kommen ja wirklich vor. Jedenfalls bei meiner Heizungssteuerung.
Oder gibt es da auch eine Möglichkeit?
gruß
maverick1509:
Das mit den -127 abfragen ist sicherlich kein Problem. Was mich am DS18B20 stört, das bei Fehler in der Kommunikation +85 ausgegeben wird.
Wer hat sich sowas ausgedacht? Das kann man leider nicht als Fehler abfragen denn die +85 kommen ja wirklich vor. Jedenfalls bei meiner Heizungssteuerung.
Oder gibt es da auch eine Möglichkeit?
gruß
Wann tritt die Meldung (+85) auf?
Ist bei mir noch nicht vorgekommen.
Wäre hier auch kein Drama, da ich nur die Außentemperatur messe.
Ich frage solange ab, bis ich nicht mehr -127 oder 85 bekomme, allerdings max. 5 Mal. Dann gebe ich einen Fehler aus. Solange nehme ich eben die letzten guten Werte.
Allerdings kommen bei meinen Messungen 85° nicht vor.
Hallo,
sollte man nicht statt die Fehlermeldungen zu erkennen sich lieber damit beschäftigen das Problem für den Fehler zu lösen? Verkabelung ändern, Anschlüsse kontrollieren, Spannungsversorgung kontrollieren usw.
Ich habe welche im Auto verbaut und keine Aussetzer. Habe Netzwerkkabel verwendet. Jedes Adernpaar zu einer Leitung verbunden, sodass man 4 Leitungen + Schirm hat. Eine Leitung bleibt dann übrig oder man nutzt eben 2 Adernpaare als fette Masseleitung. Den Schirm nur an der Spannungsversorgung mit auf Masse gelegt. Andere Seite bleibt offen. Man kann auch noch an jeden Sensor einen kleinen Keramikkondensator löten. Hab ich aber nicht gemacht. Meine Leitung im Auto hat immer an den Positionen eine Steckverbindung dran, kann also wahllos Sensoren anstecken oder frei lassen.
Oder der Code läuft nicht ganz einwandfrei?
Du kannst aber nicht ausschließen, dass ein Sensorim Betrieb auch mal kaputt geht und dann ist solch eine Meldung schon sehr nützlich.
Bei meinem Projekt kann auch mal das Kabel kaputt sein (Bienenheizung/Honigeimer erwärmen).
Dann bei -127° brauch ich mir keine Sorgen machen, ob jemand überlebt hat.
Bei 85° schaltet eh die Heizung ab.
Ich dachte eigentlich, man kann abfragen ob die Adresse noch ansprechbar ist und dann Fehler ausgeben aber bei meinem Sketch hab ich keine Adressen eingetragen, daher geht das nicht wie ich es mir dachte.
skorpi08:
Bei meinem Projekt kann auch mal das Kabel kaputt sein (Bienenheizung/Honigeimer erwärmen).
Dann bei -127° brauch ich mir keine Sorgen machen, ob jemand überlebt hat.
Bei 85° schaltet eh die Heizung ab.
Ich dachte eigentlich, man kann abfragen ob die Adresse noch ansprechbar ist und dann Fehler ausgeben aber bei meinem Sketch hab ich keine Adressen eingetragen, daher geht das nicht wie ich es mir dachte.
Aber auch das ist lösbar.
Schreibe den Sketch so um, dass du eine Adresse eingibst und du kannst das auch prüfen.
Ich meine in den Beispielen ist das auch beschrieben.
Ja, in den Beispielen ist es zwar beschrieben aber mir gefällts so.
Weniger Code und beim Austausch des Sensors brauch ich die Adresse nicht mehr zu ändern.
Auserdem, weiß ich nicht wie ich es mit Serial.print ausgeben kann:
printData(insideThermometer);
printData(outsideThermometer);
Momentan hab ich es so:
sensors.requestTemperatures();
Temp_bottom = sensors.getTempCByIndex(0);
Temp_top = sensors.getTempCByIndex(1);
lcd.print((Temp_top),1);
skorpi08:
Ja, in den Beispielen ist es zwar beschrieben aber mir gefällts so.
Weniger Code und beim Austausch des Sensors brauch ich die Adresse nicht mehr zu ändern.
Naja, das eine was man will, das andere was man muss. 