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
}
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
}
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
#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
}
}
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