Hallo,
ich bin Anfänger (seit fast 2 Wochen) und habe mir nachfolgenden Sketch "zusammengebastelt" ![]()
Ich würde gerne, bei einem Sensor defekt den Wert "Fehler" angezeigt bekommen,
hierbei komme ich aber seit Stunden keinen Schritt weiter.
Vieleicht kann mir jemand weiterhelfen.
Andere Verbesserungvorschläge sind gerne gesehen.
Gruß Carsten
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire ds(A0); //pin für ds1820
//DeviceAdressen der einzelnen ds1820 Temperatursensoren angeben. (loop anpassen)
DeviceAddress sensor1 = { 0x28,0xea,0xcc,0x54,0x07,0x00,0x00,0x57 };
DeviceAddress sensor2 = { 0x28,0x0c,0xd3,0x54,0x07,0x00,0x00,0xdf };
DeviceAddress sensor3 = { 0x28,0x48,0x15,0x57,0x07,0x00,0x00,0x40 };
char sensor1Name[] = " Sensor 1 : ";
char sensor2Name[] = "Frostschutz Zone 1: ";
char sensor3Name[] = "Frostschutz Zone 2: ";
void setup(void)
{
Serial.begin(9600);
pinMode (10,OUTPUT); //Ausgabe LED Pin 10 Frostschutz
digitalWrite (11, OUTPUT); //Ausgabe LED Pin 11 Rück.- Ausblasluftregelung Zone 1
pinMode (12,OUTPUT); //Ausgabe LED Pin 12 Rück.- Ausblasluftregelung Zone 2
pinMode (13, OUTPUT); //Platine Spannungsversorgung an
digitalWrite (13, HIGH); //Ausgabe LED Pin 13 Platine an
}
void writeTimeToScratchpad(byte* address)
{
//reset the bus
ds.reset();
//select our sensor
ds.select(address);
//CONVERT T function call (44h) which puts the temperature into the scratchpad
ds.write(0x44,1);
//sleep a second for the write to take place
delay(100);
}
void readTimeFromScratchpad(byte* address, byte* data)
{
//reset the bus
ds.reset();
//select our sensor
ds.select(address);
//read the scratchpad (BEh)
ds.write(0xBE);
for (byte i=0;i<9;i++){
data[i] = ds.read();
}
}
float getTemperature(byte* address)
{
int tr;
byte data[12];
writeTimeToScratchpad(address);
readTimeFromScratchpad(address,data);
//put in temp all the 8 bits of LSB (least significant byte)
tr = data[0];
if (address[0] == 0x10) // DS18B20
{
//check for negative temperature
if (data[1] > 0x80)
{
tr = !tr + 1; //two’s complement adjustment
tr = tr * -1; //flip value negative.
}
//drop bit 0
tr = tr >> 1;
//COUNT PER Celsius degree (10h)
int cpc = data[7];
//COUNT REMAIN (0Ch)
int cr = data[6];
return tr - (float)0.25 + (cpc - cr)/(float)cpc;
}
else // DS18B20
{
return ((data[1] << 8) + tr) * (float)0.0625;
}
}
void loop(void)
{
float temp1 = getTemperature(sensor1);
float temp2 = getTemperature(sensor2);
float temp3 = getTemperature(sensor3);
Serial.print(sensor1Name);
Serial.print(temp1);
Serial.print(" "); // Hier müssen wir ein wenig tricksen
Serial.write(176); // um das °-Zeichen korrekt darzustellen
Serial.println("C");
Serial.print(sensor2Name);
Serial.print(temp2);
Serial.print(" "); // Hier müssen wir ein wenig tricksen
Serial.write(176); // um das °-Zeichen korrekt darzustellen
Serial.println("C");
Serial.print(sensor3Name);
Serial.print(temp3);
Serial.print(" "); // Hier müssen wir ein wenig tricksen
Serial.write(176); // um das °-Zeichen korrekt darzustellen
Serial.println("C");
Serial.println();
delay(100);
if
(temp2 >= 3 && temp2 <=7 || temp2 >= 18 && temp2 <= 22)
{
digitalWrite(12, HIGH);
Serial.println("Ausblasregelung Zone 1");
}
else
{
digitalWrite(12, LOW);
Serial.println("Rueckluftregelung Zone 1");
}
if
(temp3 >= 3 && temp3 <=7 || temp3 >= 18 && temp3 <= 22)
{
digitalWrite(11, HIGH);
Serial.println("Ausblasluftregelung Zone 2");
}
else
{
digitalWrite(11, LOW);
Serial.println("Rueckluftregelung Zone 2");
}
if
(temp1 <2)
{
digitalWrite(10,HIGH);
Serial.println("Frostschutz Aktiv");
}
else
{
digitalWrite (10,LOW);
Serial.println("Frostschutz Inaktiv");
}
}