Ciao a tutti,
Grazie al vostro aiuto sono riuscito ad andare avanti con il mio progetto, ma mi trovo davanti ad un dilemma per il quale non trovo soluzioni online.
Ho il solito schermo arduino lcd 1602, ma avrei bisogno di scriverci 3 righe e non 2, come posso fare?
Potrei aggiungere un tasto per fa comparire un altra riga?
O addirittura un'altra pagina di due righe? (perché adesso rilevo solo 3 dati, ma ne aggiungerò man mano).
Pensavo quindi a 1 pulsante per andare avanti, o magari anche 2, uno per andare avanti e l'altro per tornare indietro.
Come dovrei procedere?
Se avete altre soluzioni ben venga!!
questo è il mio sketch
#include <dht11.h> //For DHT11
#include <OneWire.h> //For DS18B20
#include <LiquidCrystal.h>
const byte DHT11_PIN = 4; //DHT11 Signal pin on digital 4
const byte DS18B20_Pin = 2; //DS18B20 Signal pin on digital 2
dht11 DHT;
OneWire ds(DS18B20_Pin); // on digital pin 4
float temperature; //For DS18B20
int chk; //For DHT11
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)");
lcd.begin(16, 2);
}
void loop()
{
//Start DHT11
chk = DHT.read(DHT11_PIN); // READ DATA DHT11
switch (chk){
case DHTLIB_OK:
//Serial.print("OK,\t ");
Serial.print("Umidita dentro casa : \t "); // DISPLAT DATA
Serial.print((float)DHT.humidity,1);
Serial.println(" %");
lcd.setCursor(0, 0);
lcd.print("Umid casa ");
lcd.print((float)DHT.humidity,1);
lcd.println(" %");
Serial.print("Temp. dentro casa : \t ");
Serial.print((float)DHT.temperature,1);
Serial.println(" c");
lcd.setCursor(0,1);
lcd.print("Temp casa ");
lcd.print((float)DHT.temperature,1);
lcd.println(" c");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Time out error,\t");
break;
default:
Serial.print("Unknown error,\t");
break;
} //End DHT11
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");
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
}