Hallo Liebe Arduino Gemeinde,
ich habe ein Verständnisproblem. Ich habe 2 mal den DS18S20 Sensor und möchte diese auf meinem 2 x 16 LCD ausgeben. Ich habe hierzu das DS18X20 Example geöffnet und an meine Bedürfnisse angepasst (OneWire Pin und LCD Konfig.). Nun wollte ich den Code so anpassen das ich in der 2ten Zeile die Temperatur des 2ten Sensors anzeige. Er ließt offensichtlich beide Temps ein, jedoch zeigt er in beiden Zeilen die selbe Temperatur, dafür aber abwechselt Sensor 1 und dann Sensor 2. Also so:
Temp1=23,61°C
Temp2=23,61°C
und anschließend
Temp1=23,22°C
Temp2=23,22°C
Ich hätte erwartet das er mir es so anzeigt:
Temp1=23,61°C
Temp2=23,22°C
Anbei meine Code:
#include <OneWire.h>
#include <LiquidCrystal.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire ds(8); // on pin 10
void setup(void) {
lcd.clear();
lcd.begin(16, 2);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius;
float celsius2;
if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
// convert the data to actual temperature
unsigned int raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// count remain gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.9;
celsius2 = (float)raw / 16.9;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp1=");
lcd.print(celsius);
lcd.print((char(223)));
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("Temp2=");
lcd.print(celsius2);
lcd.print((char(223)));
lcd.print("C");
delay(1000);
Ich hoffe Ihr Steinigt mich jetzt nicht beim ersten Post.... ![]()
Was muss ich wie umstellen damit ich das realisieren kann was ich möchte?
Desweiteren habe ich noch 2 Fragen:
- Wie kann man die Ausgabe auf 1ne Stelle nach dem Komma begrenzen?
- Wie kann erreicht werten das beide Sensoren mit einem Delay von 2s geupdated werden? Also Temp1 wird aktuallisiert und Temp2 erst nach 2s, der Wert von Temp1 soll dabei erhalten bleiben und wird erst 2s nach update von Temp2 wieder geupdated....
Hoffe das mir her jemand helfen kann. Ich habe einen Arduino Thermometer im Internet gesehen der mir so gut gefällt, das ich diesen unbedingt nachbauen möchte. Jedoch möchte ich den Code so gut es geht selbst zusammenstricken... ![]()
Leider weiß ich auch nicht ob ich den Link zur Videoportal oder zum Bilderdienst posten darf.
So, jetzt wünsche ich noch allen Vätern einen schönen Vatertags abend und bin gespannt auf eure Antworten.
Grüße Thomas