Temperatursensor DS18B20 mit dem Arduino Uno Teil 2

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

2 Gedanken zu „Temperatursensor DS18B20 mit dem Arduino Uno Teil 2

  1. Pingback: Temperatursensor DS18B20 mit dem Arduino Uno und LCD Display | Shelvin – Elektronik ausprobiert und erläutert

  2. Friedrich Wilhelm

    Wenn ich diesen Code ausprobiere, kommt als Ergebnis im seriellen Monitor immer „-1000“.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.