Basierend auf dem 1. Teil dieser Beschreibung habe ich nun das Programm gekürzt und das Auslesen vom Temperatursensor in einer Funktion zusammen gefasst.
float readDS18B20()
Das Programm
// Temperatur Sensor DS18B20 auslesen
// - kurze Version 1.1
// - in einer Funktion zusammen gefasst
//
// Matthias Busse 8.6.2014 Version 1.1
#include < OneWire.h>
OneWire ds(4); // Pin 4 mit 4,7 kOhm gegen 5V gelegt
#include < LiquidCrystal.h>
LiquidCrystal lcd(12, 13, 11, 7, 8, 9, 10);
void setup(void) {
Serial.begin(38400); // Serielle Ausgabe
Serial.println("Temp. Sensor");
Serial.println("MBS Ver. 1.10 ");
lcd.begin(20,4);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp. Sensor");
lcd.setCursor(0,1); // Display ausgeben
lcd.print(" MBS Ver. 1.10 ");
delay(1000);
}
void loop(void) {
float celsius, fahrenheit;
celsius=readDS18B20();
Serial.println(celsius);
fahrenheit = celsius * 1.8 + 32.0;
lcd.setCursor(0,1); // LCD Display ausgeben
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(celsius);
lcd.print((char)223); // Grad Symbol ausgeben
lcd.print("C ");
lcd.print(fahrenheit);
lcd.print((char)223);
lcd.print("F");
}
float readDS18B20() {
// DS18B20 Temperatur Sensor 1-wire auslesen
// Dauer ca. 1,1 Sekunden.
//
// Ausgabe: float Grad Celsius
//
// Matthias Busse Version 1.0 vom 8.6.2014
#define DS18B20_ID 0x28
float temp;
byte i, present = 0, data[12], addr[8];
if (!ds.search(addr)) { //Sensor finden
ds.reset_search();
delay(250);
}
if (OneWire::crc8( addr, 7) != addr[7]) { return -1000;}
if (addr[0] != DS18B20_ID && addr[0] != DS18B20_ID) { return -1000;}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // Start konversion
delay(850); // warten
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // lesen
for ( i = 0; i < 9; i++) { // 9 Byte empfangen
data[i] = ds.read();
}
temp = ( (data[1] << 8) + data[0] )*0.0625; // Temperatur berechnen
return temp;
}
von Matthias Busse

Pingback: Temperatursensor DS18B20 mit dem Arduino Uno und LCD Display | Shelvin – Elektronik ausprobiert und erläutert
Wenn ich diesen Code ausprobiere, kommt als Ergebnis im seriellen Monitor immer „-1000“.