Errore " Redefinition of 'float temperature' " dopo unione 2 sketch

Buongiorno a tutti,

Dopo avere sostituito il mio sensore DHT11 per un DHT22 ho riscritto il mio sketch.
Il sensore funziona e la parte che ho modificato funziona (per il DHT22)

MA, la parte vecchia che riguarda il mio sensore DS18B20, parte alla quale non ho toccato! mi da adesso l'errore Redifinition of 'float temperature' come foto in allegato.

Qui sotto il mio sketch, se qualcuno gentilmente mi può aiutare perché io non ci capisco più niente.

#include <DHT.h>                           //For DHT22 & AM2302 library
#include <OneWire.h>                             //For DS18B20
#include <LiquidCrystal.h>

#define DHTPIN 3                                    //DHT22
#define DHTTYPE DHT22
const byte DS18B20_Pin = 2;                //DS18B20 Signal pin on digital 2

DHT dht(DHTPIN, DHTTYPE);
OneWire ds(DS18B20_Pin);                  // on digital pin 4
float temperature;                                 //For DS18B20
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


void setup()
{
  Serial.begin(9600); 
  //Serial.println("DHT TEST PROGRAM ");   //DHT11
  //Serial.print("LIBRARY VERSION: ");
  //Serial.println(DHT11LIB_VERSION);
  Serial.println();
  //Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  dht.begin();                            //DHT22
  lcd.begin(16, 2);
}
 
void loop()
{
                                                  //start DHT22
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println(F("Failed to read from DHT"));
  }
  else {
    Serial.print(F("Humidity: ")); 
    Serial.print(h);
    Serial.print(F(" %\t"));
    Serial.print(F("Temperature: ")); 
    Serial.print(t);
    Serial.println(F(" C"));
  }
}                                                   //End DHT22
  
                 float temperature = getTemp();     //Start DS18B20
                 Serial.print("Temp. acqua :            ");
                 Serial.print(temperature);
                 Serial.println(" c");
                 Serial.println(" ");
                 //lcd.setCursor(0,1);
                 //lcd.print("Temp acq  ");
                 //lcd.print(temperature);
                 //lcd.println("c");
                  lcd.print("Home  Hum  Tank");
                  lcd.setCursor(0,1);
                  lcd.print((float)DHT.temperature,1);
                  lcd.print("c ");
                  lcd.print(DHT.humidity,1);
                  lcd.print("% ");
                  lcd.print(temperature);
                  lcd.println("c");
 
 delay(1000);                                       //just to slow down the output it's easier to read
 
}


float getTemp()
{
 //returns the temperature from one DS18S20 in DEG Celsius
 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) 
 {
   //no more sensors on chain, reset search
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) 
 {
   Serial.println("CRC is not valid!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) 
 {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);                           // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr);  
 ds.write(0xBE); // Read Scratchpad

 
 for (int i = 0; i < 9; i++)                  // we need 9 bytes
 {
  data[i] = ds.read();
 }
 
 ds.reset_search();
 
 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB);         //using two's compliment
 float TemperatureSum = tempRead / 16;
 
 return TemperatureSum;                       //End DS18B20
 
}

Traduzione " Redefinition of 'float temperature' ": Ridefinizione della variabile temperature di tipo float

Stai definendo la variabile in riga 11

float temperature;                                 //For DS18B20

e in riga 46

                 float temperature = getTemp();     //Start DS18B20

Togli il float.

Ciao Uwe

Grazie per la tua risposta.
Ho messo come commento la riga 11 per vedere e adesso mi dà un altro errore che non capisco (sempre nella parte che non ho toccato e che prima funzionava bene).
Qui sotto lo sketch dopo la modifica e in allegato la foto dell'errore che mi compare alla rive successiva all'errore precedente.
Non riesco a capire.

#include <DHT.h>                           //For DHT22 & AM2302 library
#include <OneWire.h>                       //For DS18B20
#include <LiquidCrystal.h>

#define DHTPIN 3                           //DHT22
#define DHTTYPE DHT22
const byte DS18B20_Pin = 2;                //DS18B20 Signal pin on digital 2

DHT dht(DHTPIN, DHTTYPE);
OneWire ds(DS18B20_Pin);                  // on digital pin 4
//float temperature;                        //For DS18B20
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


void setup()
{
  Serial.begin(9600); 
  //Serial.println("DHT TEST PROGRAM ");   //DHT11
  //Serial.print("LIBRARY VERSION: ");
  //Serial.println(DHT11LIB_VERSION);
  Serial.println();
  //Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  dht.begin();                            //DHT22
  lcd.begin(16, 2);
}
 
void loop()
{
                                                  //start DHT22
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println(F("Failed to read from DHT"));
  }
  else {
    Serial.print(F("Humidity: ")); 
    Serial.print(h);
    Serial.print(F(" %\t"));
    Serial.print(F("Temperature: ")); 
    Serial.print(t);
    Serial.println(F(" C"));
  }
}                                                   //End DHT22
  
                 float temperature = getTemp();     //Start DS18B20
                 Serial.print("Temp. acqua :            ");
                 Serial.print(temperature);
                 Serial.println(" c");
                 Serial.println(" ");
                 //lcd.setCursor(0,1);
                 //lcd.print("Temp acq  ");
                 //lcd.print(temperature);
                 //lcd.println("c");
                  lcd.print("Home  Hum  Tank");
                  lcd.setCursor(0,1);
                  lcd.print((float)DHT.temperature,1);
                  lcd.print("c ");
                  lcd.print(DHT.humidity,1);
                  lcd.print("% ");
                  lcd.print(temperature);
                  lcd.println("c");
 
 delay(1000);                                       //just to slow down the output it's easier to read
 
}


float getTemp()
{
 //returns the temperature from one DS18S20 in DEG Celsius
 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) 
 {
   //no more sensors on chain, reset search
   ds.reset_search();
   return -1000;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) 
 {
   Serial.println("CRC is not valid!");
   return -1000;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) 
 {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1);                           // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr);  
 ds.write(0xBE); // Read Scratchpad

 
 for (int i = 0; i < 9; i++)                  // we need 9 bytes
 {
  data[i] = ds.read();
 }
 
 ds.reset_search();
 
 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB);         //using two's compliment
 float TemperatureSum = tempRead / 16;
 
 return TemperatureSum;                       //End DS18B20
 
}

Di sicuro stai chiudendo le graffe a casaccio. Usa CTRL+T

La loop() la chiudi subito prima della riga con getTemp()

}         //magari toglierla !!!
   float temperature = getTemp();     //Start DS18B20e quindi

Perciò tutto quello che viene dopo NON ha senso di stare li.

Bene, Grazie al vostro aiuto sto facendo piccoli progressi ma ho sempre problemi nuovi dopo ogni modifica.

Adesso sembra che le parentesi graffe siano sistemate (magari se nello sketch qui sotto vedete qualcosa fatemi sapere che sistemo), PERO' adesso ho un nuovo problema con getTemp() e davvero non capisco nulla perché non ci ho toccato e prima funzionava :cry:

#include <DHT.h>                           //For DHT22 & AM2302 library
#include <OneWire.h>                       //For DS18B20
#include <LiquidCrystal.h>

#define DHTPIN 3                           //DHT22
#define DHTTYPE DHT22
const byte DS18B20_Pin = 2;                //DS18B20 Signal pin on digital 2

DHT dht(DHTPIN, DHTTYPE);
OneWire ds(DS18B20_Pin);                  // on digital pin 4
//float temperature                         //For DS18B20
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


void setup()
{
  Serial.begin(9600); 
  //Serial.println("DHT TEST PROGRAM ");   //DHT11
  //Serial.print("LIBRARY VERSION: ");
  //Serial.println(DHT11LIB_VERSION);
  Serial.println();
  //Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  dht.begin();                            //DHT22
  lcd.begin(16, 2);
}

void loop()
{
  //start DHT22
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) 
  {
    Serial.println(F("Failed to read from DHT"));
  }
  else 
  {
    Serial.print(F("Humidity: ")); 
    Serial.print(h);
    Serial.print(F(" %\t"));
    Serial.print(F("Temperature: ")); 
    Serial.print(t);
    Serial.println(F(" C"));
  }
  //End DHT22

  float temperature = getTemp();     //Start DS18B20
  Serial.print("Temp. acqua :            ");
  Serial.print(temperature);
  Serial.println(" c");
  Serial.println(" ");
  //lcd.setCursor(0,1);
  //lcd.print("Temp acq  ");
  //lcd.print(temperature);
  //lcd.println("c");
  lcd.print("Home  Hum  Tank");
  lcd.setCursor(0,1);
  lcd.print(DHT.temperature,1);
  lcd.print("c ");
  lcd.print(DHT.humidity,1);
  lcd.print("% ");
  lcd.print(temperature);
  lcd.println("c");

  delay(1000);                                       //just to slow down the output it's easier to read




float getTemp()
{
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) 
  {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) 
  {
    Serial.println("CRC is not valid!");
    return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) 
  {
    Serial.print("Device is not recognized");
    return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);                           // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);  
  ds.write(0xBE); // Read Scratchpad


  for (int i = 0; i < 9; i++)                  // we need 9 bytes
  {
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB);         //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;                       //End DS18B20

}
}

Qualcuno vede dov'è sbaglio?

Dopo la delay(1000) e quindi prima di float getTemp() devi chiudere la graffa (quindi togli al fondo di tutto una delle due chiuse, una è di troppo)

Poi, anche queste de righe danno errore:

lcd.print(DHT.temperature, 1);

DHT NON esiste.
Ma soprattutto a che serve stò pezzo visto che il dht lo hai già interrogato prima usando dht.readTemperature()

:blush: Ho capito il mio sbaglio.
Praticamente utilizzavo ancora il DHT che avevo modificato più in alto quindi non esisteva più.
Grazie grazie mille per il vostro aiuto non ci sarei mai arrivato da solo.

Adesso il mio sketch è questo

#include <DHT.h>                           //For DHT22 & AM2302 library
#include <OneWire.h>                       //For DS18B20
#include <LiquidCrystal.h>

#define DHTPIN 3                           //DHT22
#define DHTTYPE DHT22
const byte DS18B20_Pin = 2;                //DS18B20 Signal pin on digital 2

DHT dht(DHTPIN, DHTTYPE);
OneWire ds(DS18B20_Pin);                  // on digital pin 4
//float temperature                         //For DS18B20
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


void setup()
{
  Serial.begin(9600); 
  //Serial.println("DHT TEST PROGRAM ");   //DHT11
  //Serial.print("LIBRARY VERSION: ");
  //Serial.println(DHT11LIB_VERSION);
  Serial.println();
  //Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
  dht.begin();                            //DHT22
  lcd.begin(16, 2);
}

void loop()
{
  //start DHT22
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  /* check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) 
  {
    Serial.println(F("Failed to read from DHT"));
  }
  else 
  {
    Serial.print(F("Humidity: ")); 
    Serial.print(h);
    Serial.print(F(" %\t"));
    Serial.print(F("Temperature: ")); 
    Serial.print(t);
    Serial.println(F(" C"));
  }*/  //End DHT22

  float temperature = getTemp();     //Start DS18B20
  Serial.print("Temp. acqua :            ");
  Serial.print(temperature);
  Serial.println(" c");
  Serial.println(" ");
  //lcd.setCursor(0,1);
  //lcd.print("Temp acq  ");
  //lcd.print(temperature);
  //lcd.println("c");
  lcd.print("Home  Hum  Tank");
  lcd.setCursor(0,1);
  lcd.print(t);
  lcd.print("c ");
  lcd.print(h);
  lcd.print("% ");
  lcd.print(temperature);
  lcd.println("c");

  delay(1000);                                       //just to slow down the output it's easier to read

}


float getTemp()
{
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) 
  {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) 
  {
    Serial.println("CRC is not valid!");
    return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) 
  {
    Serial.print("Device is not recognized");
    return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);                           // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);  
  ds.write(0xBE); // Read Scratchpad


  for (int i = 0; i < 9; i++)                  // we need 9 bytes
  {
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB);         //using two's compliment
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;                       //End DS18B20

}

Non so ancora se funziona bene perché sono al lavoro adesso, ma almeno me lo verifica senza trovare errori, stasera faccio la prova con i sensori. Penso di essere in grado di sistemare se non viene fuori bene sullo schermo lcd adesso, ma se vedete nello sketch qualcosa da sistemare accetto volentieri consigli e critiche per migliorare!

Grazie grazie ancora per il vostro aiuto nid e Uwe