Refresh lcd

salve, mischiando un po di progetti sono arrivato a scrivere:

#include <Wire.h>
#include "RTClib.h"

#define SET       A3
#define PIU       A2
#define MENO      A1

char buffer[10];
unsigned long time=0;
unsigned long timeSet=0;
int  setModeTime=1000;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // 0x20 is adresss for LCC 16x2
RTC_DS1307 RTC;


void setup () {
  lcd.init(); 
  lcd.backlight(); //backlight is now ON
  Wire.begin();
  RTC.begin();
  lcd.begin(16, 2);

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  pinMode( SET, INPUT );
  pinMode( PIU, INPUT );
  pinMode( MENO, INPUT );
}

void loop () {

  if ( analogRead( SET ) < 100) { 
    time = millis(); 
  }

  DateTime now = RTC.now();
  lcd.clear();

  sprintf(buffer,  "%02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(3,0);
  lcd.print( buffer );

  char buffer[10] = "";

  sprintf(buffer,  "%02d:%02d", now.hour(), now.minute()); 
  lcd.setCursor(0,1);
  lcd.print( buffer );

  if (time > 0 && setModeTime < (millis() - time) ) { 
    setMode( now ); 
  }
  delay(1000);
}

void setMode( DateTime now ) {
  boolean setMode = true;
  int setModeLevel = 0;

  int _day = now.day();
  int _month = now.month();
  int _year = now.year();
  int _hour = now.hour();
  int _min = now.minute();
  int _sec = now.second();

  lcd.clear();
  lcd.setCursor(3,0);
  sprintf(buffer,  "%s: %02d", "Giorno", _day);
  delay(1000);
  timeSet = millis();

  while ( setMode ) {
    if ( analogRead(SET) >500 || analogRead(PIU) > 500 || analogRead(MENO) > 500 ) { 
      timeSet = millis(); 
    }

    lcd.setCursor(0,0);

    // Set Day
    if ( setModeLevel == 0 ) {
      if ( analogRead(PIU) > 1000 && _day < 31) { 
        _day++; 
      }
      if ( analogRead(MENO) > 1000 && _day > 1) { 
        _day--; 
      }

      sprintf(buffer,  "%s: %02d", "Giorno", _day);
    }
    // Set Month
    if ( setModeLevel == 1 ) {
      if ( analogRead(PIU) > 1000 && _month < 12) { 
        _month++; 
      }
      if ( analogRead(MENO) > 1000 && _month > 1) { 
        _month--; 
      }

      sprintf(buffer,  "%s: %02d", "Mese", _month);
    }
    // Set Year
    if ( setModeLevel == 2 ) {
      if ( analogRead(PIU) > 1000 && _year < 9999) { 
        _year++; 
      }
      if ( analogRead(MENO) > 1000 && _year > 1900) { 
        _year--; 
      }

      sprintf(buffer,  "%s: %02d", "Anno", _year);
    }
    // Set Hour
    if ( setModeLevel == 3 ) {
      if ( analogRead(PIU) > 1000 && _hour < 24) { 
        _hour++; 
      }
      if ( analogRead(MENO) > 1000 && _hour > 1) { 
        _hour--; 
      }

      sprintf(buffer,  "%s: %02d", "Ora", _hour);
    }
    // Set Minute
    if ( setModeLevel == 4 ) {
      if ( analogRead(PIU) > 1000 && _min < 60) { 
        _min++; 
      }
      if ( analogRead(MENO) > 1000 && _min > 1) { 
        _min--; 
      }

      sprintf(buffer,  "%s: %02d", "Minuti", _min);
    }


    lcd.print( buffer );
    if ( analogRead(SET) > 500 ) { 
      lcd.clear(); 
      setModeLevel++;  
    }
    if ( setModeLevel > 4 ) { 
      setModeLevel=0; 
    }

    if (timeSet > 0 && (setModeTime*2) < (millis() - timeSet) ) {
      RTC.adjust(DateTime(_year, _month, _day, _hour, _min));
      setMode = false;
    }
    delay(100);
  }
}

con il quale praticamente visualizzo su un lcd ora e data.
in teoria funziona tutto, però il display ha un fastidioso refresh ogni secondo dovuto al delay nel void loop.
Qualcuno ha qualche idea su come eliminarlo? (ps se trovate altre cose che non vanno dite pure :grin: )
grazie

Il refresh è dovuto a lcd.clear()

grazie! avevo provato, ma evidentemente ho cancellato il lcd.clear successivo -.-