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“.