leggere sul display DS18B20 tramite indirizzo ?

devo leggere 4 o piu DS18B20 con arduino mega su display 20x4

sono riuscito a leggerle sulla seriale , ma nel display non riesco

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h> // libreria wire presente, di fault, nell'IDE
#include <LiquidCrystal_I2C.h> // libreria d
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 8
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Addresses of 3 DS18B20s
//uint8_t sensor1[8] = { 0x28, 0xEE, 0xD5, 0x64, 0x1A, 0x16, 0x02, 0xEC };
uint8_t sensor1[8] = { 0x28, 0xFF, 0x3A, 0x02, 0xC1, 0x16, 0x05, 0xF7 };
uint8_t sensor2[8] = {0x28,0xFF,0x71,0x21,0xC0,0x16,0x05,0x3d };
uint8_t sensor3[8] = {0x28,0xFF,0x1B,0x43,0xC4,0x16,0x04,0xC6 };
uint8_t sensor4[8] = {0x28,0xFF,0x57,0x08,0xC2,0x16,0x03,0x28 };
//uint8_t sensor5[8] = {0x28,0x1F,0x57,0x08,0xC2,0x16,0x03,0x28 };
void setup(void)
{
Serial.begin(9600);
lcd.begin();
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
Serial.print("S 1: ");
printTemperature(sensor1);
Serial.print("S 2: ");
printTemperature(sensor2);
Serial.print("S 3: ");
printTemperature(sensor3);
Serial.print("S4: ");
printTemperature(sensor4);
//Serial.print("S 5: ");
//printTemperature(sensor5);
Serial.println();
delay(1000);
}
void printTemperature(DeviceAddress deviceAddress)

{
float tempC = sensors.getTempC(deviceAddress);

Serial.print(tempC);
Serial.print("C | ");

lcd.setCursor(0,3);
lcd.print(tempC);
//lcd.print((char)176);
lcd.println(" C");

 

// lcd.setCursor(0, 2);
//lcd.print ("Tura: ");
//lcd.setCursor(0, 3);
// lcd.print (sensor4[8]);
// lcd.print (sensor4);
}

Descrivi meglio quale è il tuo problema e modifica il titolo del thread che, altrimenti, sembra tu stia chiedendo aiuto per LEGGERE i sensori (cosa che tu dici sai fare inviando il risultato sulla seriale) e non per VISUALIZZARE il risultato su LCD.

Guglielmo

ho trovato questo schetch , che legge i sensori tramite indirizzo , ma anche questo se tolgo un sensore , e lo rimetto si cambia di posto con un altro

NON devi preoccuparti della posizione, devi occuparti solo del "identificativo univoco" del sensore e indirizzarli tramite quello, NON tramite la posizione in qualche tabella.

Guglielmo

// Misura la temperatura con 2 sensori DS18B20
// e la visulaizza su un display LCD
#include <OneWire.h>
#include <DallasTemperature.h>
#include  <LiquidCrystal_I2C.h>
//#define Backlight 10
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tmp_address;
int temp0=0;
int temp1=0;
int temp2=0;
int temp3=0;
int numberOfDevices;

void setup(void){
lcd.begin();
numberOfDevices = 1;
sensors.begin();

delay(500);

 //pinMode(Backlight, OUTPUT); 
// digitalWrite(Backlight, HIGH); // Accende retroilluminazione
}
 
void loop(void){
  sensors.requestTemperatures(); // Comando per misurare la temp.
  
  temp0 = sensors.getTempCByIndex(0);
  lcd.setCursor(0,0); // Colonna 0, Riga 0
  lcd.print(temp0);
  lcd.print(char( 223)); // Scrive il pallino dei gradi
  lcd.print("C");// Scrive la C di Celsius

  
  temp1 = sensors.getTempCByIndex(1);
  lcd.setCursor (0,1); //Colonna 0, Riga 1
  lcd.print(temp1);
  lcd.print(char( 223)); // Scrive il pallino dei gradi
  lcd.print("C");// Scrive la C di Celsius


temp2 = sensors.getTempCByIndex(2);
  lcd.setCursor (0,2); //Colonna 0, Riga 1
  lcd.print(temp2);
  lcd.print(char( 223)); // Scrive il pallino dei gradi
  lcd.print("C");// Scrive la C di Celsius

temp3 = sensors.getTempCByIndex(3);
  lcd.setCursor (0,3); //Colonna 0, Riga 1
  lcd.print(temp3);
  lcd.print(char( 223)); // Scrive il pallino dei gradi
  lcd.print("C");// Scrive la C di Celsius


  
}

ho provato pure questo , stesso problema . sigh

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 8
#include <LiquidCrystal_I2C.h> // libreria d
LiquidCrystal_I2C lcd(0x27, 20, 4);

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Addresses of 4 DS18B20s
uint8_t sensor4[8] = { 0x28, 0xFF, 0x57, 0x08, 0xC2, 0x16, 0x03, 0x28};
uint8_t sensor2[8] = { 0x28, 0xFF, 0x71, 0x21, 0xC0, 0x16, 0x05, 0x3d};
uint8_t sensor3[8] = { 0x28, 0xFF, 0x1B, 0x43, 0xC4, 0x16, 0x04, 0xC6};
uint8_t sensor1[8] = { 0x28, 0xFF, 0x3A, 0x02, 0xC1, 0x16, 0x05, 0xF7};

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  lcd.begin();
}

void loop(void)
{
  sensors.requestTemperatures();

  // Serial.println(sensors.getTempCByIndex(0));

  Serial.print("Sensor 1: ");
  printTemperature(sensor1);

  Serial.print("Sensor 2: ");
  printTemperature(sensor2);

  Serial.print("Sensor 3: ");
  printTemperature(sensor3);

  Serial.print("Sensor 4: ");
  printTemperature(sensor4);

  lcd.setCursor(0, 0);
  lcd.print(("sensor1 "));
  lcd.print (sensors.getTempCByIndex(1), 0);
  Serial.println();

  lcd.setCursor(0, 1);
  lcd.print(("sensor2 "));
  lcd.print (sensors.getTempCByIndex(2), 0);
  Serial.println();

  lcd.setCursor(0, 2);
  lcd.print(("sensor3 "));
  lcd.print (sensors.getTempCByIndex(0), 0);
  Serial.println();

  lcd.setCursor(0, 3);
  lcd.print(("sensor4 "));
  lcd.print (sensors.getTempCByIndex(3), 0);
  Serial.println();

  delay(300);

}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print(tempC );
  //Serial.print((char)176);
  //Serial.print("C  |  ");
  Serial.print(" C    ");
  //Serial.print(DallasTemperature::toFahrenheit(tempC));
  //Serial.print((char)176);
  //Serial.println("F");




}

Sbaglio o ti avevo già indicato di studiarti QUESTO tutorial dove c'è una sezione fatta per leggere i DS18B20 tramite il loro indirizzo ?

C'è una intera sezione, chiamata "Method 2: Reading DS18B20 By Address", dove fa vedere prima come recuperare l'"address" di ogni singolo sensore (Finding Addresses Of DS18B20s On Bus) e poi come leggere tali sensori tramire il loro indirizzo (Reading DS18B20s By Address).

E' questa sezione che ti devi studiare bene e capire cosa significa leggere "per indirizzo" !!!

Guglielmo