Innanzi tutto grazie mille per la risposta..
Mi dispiace ma non so cosa sia la "classe String" quindi non so rispondere alla domanda ![]()
In ogni caso allego il codice se può essere utile:
#include <LiquidCrystal.h>
#include "DHT.h"
#define DHTPIN 6
#define DHTTYPE DHT11
#define LCD_LIGHT_ON_TIME 4000
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int pompa=7;
const int ventola=8;
const int pulsante = 13; //pulsante al pin 13
const int accensioneLcd = 10; //comando transistor per accensione LCD al pin 10
const int galleggiante = 9; //sensore galleggiante al pin 9
const int sensoreUmidita=A0;
const int led=A1;
int buttonState;
int lastButtonState = LOW;
int buttonPushCounter = 0;
int statoGalleggiante;
int lcdAcceso = 0;
int terreno;
int statoPompa = 0;
int statoVentola = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long pausaGalleggiante1 = 150;
unsigned long pausaGalleggiante2 = 300;
String message = " Attenzione! Livello Acqua Insufficente ";
int ii = 0;
int strLength;
String toShow;
void setup() {
lcd.begin(16, 2);
pinMode(led, OUTPUT);
pinMode(pulsante, INPUT);
pinMode(galleggiante, INPUT);
pinMode(sensoreUmidita, INPUT);
pinMode(pompa, OUTPUT);
pinMode(ventola, OUTPUT);
strLength = message.length();
digitalWrite(accensioneLcd, HIGH);
digitalWrite(pompa, HIGH);
digitalWrite(ventola, HIGH);
lcd.setCursor(3,0);
lcd.print ("Benvenuto");
delay(5000);
lcd.clear();
lcd.setCursor (3,0);
lcd.print ("GReeNHoUse");
lcd.setCursor(1,1);
lcd.print ("firmware v.1.0");
delay(5000);
lcd.clear();
delay(1000);
Serial.begin(9600);
}
void loop() {
statoGalleggiante = digitalRead(galleggiante);
int reading = digitalRead(pulsante);
int t = dht.readTemperature();
int h = dht.readHumidity();
int umiditaTerreno = analogRead(sensoreUmidita);
int livelloAcqua = analogRead(galleggiante);
terreno = map (umiditaTerreno, 540, 0, 0, 100);
Serial.println(umiditaTerreno, DEC);
if (reading != lastButtonState){
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay){
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH && statoGalleggiante == HIGH){
buttonPushCounter++;
}
}
}
lastButtonState = reading;
if ( buttonPushCounter >= 4)
{
buttonPushCounter = 0;
}
switch ( buttonPushCounter){
case 0:
digitalWrite(accensioneLcd, HIGH);
lcd.setCursor(0,0);
lcd.print ("Umidita' Terreno: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(7, 1);
lcd.print(terreno, DEC);
lcd.print("% ");
break;
case 1:
digitalWrite (accensioneLcd, HIGH);
lcd.setCursor(0,0);
lcd.print ("Hum. Aria: ");
lcd.setCursor(0,1);
lcd.print("Temperat.: ");
lcd.setCursor(11, 0);
lcd.print(h, DEC);
lcd.print(" % ");
lcd.setCursor(11, 1);
lcd.print(t, DEC);
lcd.print((char)(223));
lcd.print("C ");
break;
case 2:
digitalWrite (accensioneLcd, HIGH);
if (statoVentola == 1){
lcd.setCursor(0,0);
lcd.print("Ventola: ON ");
}
if (statoVentola==0){
lcd.setCursor(0,0);
lcd.print("Ventola: OFF ");
}
if(statoPompa == 1){
lcd.setCursor(0,1);
lcd.print("Pompa: ON ");
}
if(statoPompa == 0){
lcd.setCursor(0,1);
lcd.print("Pompa: OFF ");
}
break;
case 3:
digitalWrite (accensioneLcd, LOW);
lcd.clear();
break;
}
if(statoGalleggiante == LOW){
digitalWrite (pompa, HIGH);
digitalWrite (led, HIGH);
lcd.clear();
digitalWrite(accensioneLcd, HIGH);
toShow = message.substring(ii,ii+16);
lcd.print(toShow);
ii = ii + 2;
if(ii>(strLength-16)) {
ii = 0;
}
delay(500);
}
else{
digitalWrite(led, LOW);
}
if (t>28){
digitalWrite (ventola, LOW);
statoVentola=1;
}
if (h>50){
digitalWrite (ventola, LOW);
statoVentola=1;
}
else if (t<=20 && h<=25){
digitalWrite (ventola, HIGH);
statoVentola=0;
}
if (terreno<=7 && statoGalleggiante == HIGH){
digitalWrite (pompa, LOW);
statoPompa=1;
}
else if (terreno>=30 && statoGalleggiante == HIGH){
digitalWrite (pompa, HIGH);
statoPompa=0;
}
}
serra.ino.ino.ino (4.6 KB)