Go Down

Topic: Fehlenden DS18B20 erkennen (Read 104 times) previous topic - next topic

buffalo64

Ich habe zwei DS18B20 auf OneWire und kann erkennen, ob einer der beiden ausgefallen ist. Wie kann ich den Sketch umbauen, damit ich erkenne, welcher der beiden fehlt?

Da es bis jetzt 371 Zeilen sind, habe ich den Rest entfernt, damit es übersichtlicher ist.

Code: [Select]
OneWire sensorWire(DS18B20_PIN);        // OneWire initialisieren

DallasTemperature sensors(&sensorWire); // Verknüpfen der Temp-sensoren mit OneWire
DeviceAddress sensors1 = {0x28, 0xFF, 0x62, 0xE7, 0x35, 0x16, 0x04, 0xD9};    // Adressen der DS18B20 Temp-sensoren
DeviceAddress sensors2 = {0x28, 0xFF, 0x65, 0xFE, 0x35, 0x16, 0x04, 0x23};

Rest entfernt

float getDallasTempC(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC != DEVICE_DISCONNECTED_C)
  {
    return (tempC);
    bool aus = 1;
  }
  else
        while (aus){
        lcd.setCursor(0,0);
        lcd.print("********************");
        lcd.setCursor(0,1);
        lcd.print("*      St\xEFrung     *");
        lcd.setCursor(0,2);
        lcd.print("*   unten / oben   *");
        lcd.setCursor(0,3);
        lcd.print("********************");
        aus();
        }
   
}

wno158

Welcher fehlt hast Du schon erkannt.

Deine Funktion arbeitet doch nur auf jeweils einer Devicesdresse. Das ist entweder sensors1 oder sensors2. Da steckt also die Information schon drin.
Gruß Walter

buffalo64

Ich kann dir leider nicht ganz folgen. Woher weiß ich bzw. wie ermittle ich, ob es sensor1 oder sensor2 ist, der ausgesteckt (fehlend) ist?

Tommy56

Na, wenn Du die Adresse von sensors1 übergibst und da kommt ein Fehler, dann ist Sensor1 defekt

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

buffalo64

Ich weiß aber nicht, wie ich das auswerten kann. Derzeit schreibe ich "Störung  unten / oben" auf das LCD (sensors1 = unten, sensors2 = oben), ich würde aber gerne entweder "Störung unten" oder Störung oben" schreiben.

Nach meinem Verständnis müsste ich etwas programmieren wie:
if (tempC von sensor1 != DEVICE_DISCONNECTED_C) - schreibe Störung unten
if (tempC von sensor2 != DEVICE_DISCONNECTED_C) - schreibe Störung oben

Wie ich die Abfrage codemäßig formulieren soll, weiß ich leider nicht.

Tommy56

memcmp ist Dein Freund.

Code: [Select]

if (!memcmp(deviceAddress,sensors1,sizeof(sensors1))) {
  // Sensor 1 defekt
}
else // sensor2 defekt


Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

buffalo64


Go Up