Filtro antidisturbo su relè per serra automatizzata

Ho provato a sostituire i vari lcd.print("... quello che c'è dentro ...") con lcd.print(F("... quello che c'è dentro ...")) ogni volta che potevo, dato che in alcuni casi, come ad esempio quando stampo sull'Lcd valori variabili (umidità del terreno, temperatura ecc.) l'aggiunta del suddetto comando mi genera un errore nella compilazione.
In ogni caso l'lcd stanotte mi è di nuovo impazzito...
Questo è il codice modificato:

#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 (F("Benvenuto"));
  delay(5000);
  lcd.clear();
  lcd.setCursor (3,0);
  lcd.print (F("GReeNHoUse"));
  lcd.setCursor(1,1);
  lcd.print (F("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 (F("Umidita' Terreno"));
            lcd.setCursor(0, 1);
            lcd.print(F("       "));
            lcd.setCursor(7, 1);       
            lcd.print(terreno);
            lcd.print(F("%      "));
            break;
 
    case 1:
            digitalWrite (accensioneLcd, HIGH);
            lcd.setCursor(0,0);
            lcd.print (F("Hum. Aria: "));
            lcd.setCursor(0,1);
            lcd.print(F("Temperat.: "));
            lcd.setCursor(11, 0);
            lcd.print(h);
            lcd.print(F(" %   "));
            lcd.setCursor(11, 1);
            lcd.print(t);
            lcd.print((char)(223)); 
            lcd.print(F("C   "));
            break;

    case 2:
              digitalWrite (accensioneLcd, HIGH);
              if (statoVentola == 1){
              lcd.setCursor(0,0);
              lcd.print(F("Ventola:  ON      "));
            }
            
             if (statoVentola==0){
              lcd.setCursor(0,0);
              lcd.print(F("Ventola: OFF     ")); 
            }
                                      
              if(statoPompa == 1){
              lcd.setCursor(0,1);
              lcd.print(F("Pompa:    ON      "));
              }
           
            if(statoPompa == 0){
              lcd.setCursor(0,1);
              lcd.print(F("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;
  }


       
  }