est ce que quelle un connue un code juste pour afficher la temperature avec deux capteur DS18B20 sur deux salle par un afficheur lcd
jai chercher bien sur le net mais certin il affiche -0.06 , -127, NO MORE ADDRESSE, et des valeurs incorrect
je vois ce code mais avec 1 seule cpateur mais comment modifier cela pour deux capteur
aider mois stp
#include <DallasTemperature.h>
#include <OneWire.h>
#include "LiquidCrystal.h"
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// OneWire Arduino Library, connecting 1-wire devices (DS18S20, etc) to Teensy
//
// The DallasTemperature library can do all this work for you!
// MilesBurton.com
/* Broche du bus 1-Wire */
const byte BROCHE_ONEWIRE = 10;
OneWire ds(10);// on pin 8
void setup(void) {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr*, HEX);*
}
if (OneWire::crc8(addr, 7) != addr[7]) {
- Serial.println("CRC is not valid!");*
- return;*
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
- case 0x10:*
- Serial.println(" Chip = DS18S20"); // or old DS1820*
- type_s = 1;*
- break;*
- case 0x28:*
- Serial.println(" Chip = DS18B20");*
- type_s = 0;*
- break;*
- case 0x22:*
- Serial.println(" Chip = DS1822");*
- type_s = 0;*
- break;*
- default:*
- Serial.println("Device is not a DS18x20 family device.");*
- 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
Serial.print(" Data = ");
Serial.print(present,HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
_ data = ds.read();_
_ Serial.print(data, HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// 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.0;
fahrenheit = celsius * 1.8 + 32.0;
sensors2.requestTemperatures(); //Se envía el comando para leer la temperatura
float temp2= sensors2.getTempCByIndex(0); //Se obtiene la temperatura en ºC del sensor 2
lcd.setCursor(0,0);
Serial.print("Salle 1: ");
lcd.print("Salle 1: ");
lcd.print(celsius);
Serial.print(celsius);
lcd.setCursor(0,1);
* lcd.print("Salle 2: ");
lcd.print(temp2);
Serial.print("Salle 2: ");
Serial.print(temp2);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
}*_