PROGETTI ARDUINO

  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti
  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti

Progetto 121
Menu avanzato LCD
​con pulsanti

🚀 Introduzione
​

Vuoi controllare un progetto Arduino attraverso un vero menu interattivo? 🎛️
​
Con questo progetto realizzi un menu navigabile su display LCD 16×2, utilizzando quattro pulsanti per spostarti tra le voci e modificare alcuni valori.
​
👉 Una base perfetta per termostati, centraline, sistemi domotici e automazioni.

🎯 Cosa realizzerai
​

Con Arduino creerai un sistema che:
  • 📟 mostra un menu su display LCD
  • ⬆️ permette di scorrere verso l’alto
  • ⬇️ permette di scorrere verso il basso
  • ✅ seleziona le diverse funzioni
  • 🔙 ritorna al menu principale
  • 🌡️ modifica una temperatura impostata
  • 💡 modifica un livello di luminosità

🧰 Materiale necessario
​
  • 1x Arduino UNO
  • 1x display LCD 16×2 con modulo I2C
  • 4x pulsanti
  • 4x resistenze da 10kΩ
  • cavetti jumper
  • breadboard

🛒 Non hai ancora i componenti?

Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.

👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW

📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un'occhiata anche ai miei libri dedicati ad Arduino.
All'interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4rfzjXE

📚 Librerie necessarie
​

Per utilizzare il display LCD I2C devi installare la libreria:
LiquidCrystal_I2C
​

Puoi installarla direttamente dal Gestore librerie dell’Arduino IDE.

🔌 Schema di collegamento

Display LCD I2C
  • VCC → 5V
  • GND → GND
  • SDA → A4
  • SCL → A5
​
Pulsante SU
  • un terminale → pin 2
  • lo stesso terminale → GND tramite resistenza da 10kΩ
  • terminale opposto → 5V

Pulsante GIÙ
  • un terminale → pin 3
  • lo stesso terminale → GND tramite resistenza da 10kΩ
  • terminale opposto → 5V

Pulsante OK
  • un terminale → pin 4
  • lo stesso terminale → GND tramite resistenza da 10kΩ
  • terminale opposto → 5V

Pulsante INDIETRO
  • un terminale → pin 5
  • lo stesso terminale → GND tramite resistenza da 10kΩ
  • terminale opposto → 5V

Foto

💻 Codice Arduino
​/*
============================================================
 Progetto 121 - Menu avanzato LCD con pulsanti
 Menu navigabile con display LCD 16x2 I2C
============================================================
*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const int pulsanteSu = 2;
const int pulsanteGiu = 3;
const int pulsanteOk = 4;
const int pulsanteIndietro = 5;

int voceMenu = 0;
int schermata = 0;

int temperatura = 22;
int luminosita = 50;

unsigned long ultimoComando = 0;
const unsigned long debounce = 200;

void setup() {

  pinMode(pulsanteSu, INPUT);
  pinMode(pulsanteGiu, INPUT);
  pinMode(pulsanteOk, INPUT);
  pinMode(pulsanteIndietro, INPUT);

  lcd.init();
  lcd.backlight();

  lcd.setCursor(0, 0);
  lcd.print("Menu Arduino");

  lcd.setCursor(0, 1);
  lcd.print("Progetto 121");

  delay(1500);

  mostraMenu();
}

void loop() {

  if (millis() - ultimoComando < debounce) {
    return;
  }

  if (digitalRead(pulsanteSu) == HIGH) {
    ultimoComando = millis();
    comandoSu();
  }

  if (digitalRead(pulsanteGiu) == HIGH) {
    ultimoComando = millis();
    comandoGiu();
  }

  if (digitalRead(pulsanteOk) == HIGH) {
    ultimoComando = millis();
    comandoOk();
  }

  if (digitalRead(pulsanteIndietro) == HIGH) {
    ultimoComando = millis();
    schermata = 0;
    mostraMenu();
  }
}

void comandoSu() {

  if (schermata == 0) {

    voceMenu--;

    if (voceMenu < 0) {
      voceMenu = 2;
    }

    mostraMenu();
  }

  if (schermata == 1 && temperatura < 35) {
    temperatura++;
    mostraTemperatura();
  }

  if (schermata == 2 && luminosita < 100) {
    luminosita += 5;
    mostraLuminosita();
  }
}

void comandoGiu() {

  if (schermata == 0) {

    voceMenu++;

    if (voceMenu > 2) {
      voceMenu = 0;
    }

    mostraMenu();
  }

  if (schermata == 1 && temperatura > 10) {
    temperatura--;
    mostraTemperatura();
  }

  if (schermata == 2 && luminosita > 0) {
    luminosita -= 5;
    mostraLuminosita();
  }
}

void comandoOk() {

  if (schermata != 0) {
    return;
  }

  if (voceMenu == 0) {
    schermata = 1;
    mostraTemperatura();
  }

  if (voceMenu == 1) {
    schermata = 2;
    mostraLuminosita();
  }

  if (voceMenu == 2) {
    schermata = 3;
    mostraInformazioni();
  }
}

void mostraMenu() {

  lcd.clear();

  lcd.setCursor(0, 0);

  if (voceMenu == 0) {
    lcd.print("> Temperatura");
  }

  if (voceMenu == 1) {
    lcd.print("> Luminosita");
  }

  if (voceMenu == 2) {
    lcd.print("> Informazioni");
  }

  lcd.setCursor(0, 1);
  lcd.print("OK: seleziona");
}

void mostraTemperatura() {

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Temperatura");

  lcd.setCursor(0, 1);
  lcd.print(temperatura);
  lcd.print((char)223);
  lcd.print("C  SU/GIU");
}

void mostraLuminosita() {

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Luminosita");

  lcd.setCursor(0, 1);
  lcd.print(luminosita);
  lcd.print("%  SU/GIU");
}

void mostraInformazioni() {

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Menu Arduino");

  lcd.setCursor(0, 1);
  lcd.print("Progetto 121");
}

⚙️ Come funziona
​

Arduino mostra sul display tre diverse voci:
  • 🌡️ Temperatura
  • 💡 Luminosità
  • ℹ️ Informazioni
​
👉 I pulsanti SU e GIÙ permettono di scorrere il menu.

Premendo OK, Arduino apre la voce selezionata.

Nelle schermate Temperatura e Luminosità, i pulsanti permettono di aumentare o diminuire il valore.

👉 Premendo INDIETRO si ritorna al menu principale.
​
Il ritardo antirimbalzo evita che una singola pressione venga letta più volte.

🧠 Perché è un progetto importante

Impari:
  • gestione di un display LCD I2C
  • utilizzo di più pulsanti
  • creazione di un menu interattivo
  • gestione di schermate differenti
  • modifica di valori numerici
  • organizzazione del codice in funzioni
​
👉 È la base per creare pannelli di controllo Arduino completi.

🔄 Varianti possibili
​

Vuoi migliorarlo?
  • 💾 salva le impostazioni nella memoria EEPROM
  • 🎚️ sostituisci i pulsanti con un encoder rotativo
  • 🌡️ collega un sensore di temperatura reale
  • 💡 controlla la luminosità di un LED
  • 🔔 aggiungi un buzzer alla pressione dei pulsanti
  • 📋 crea nuovi sottomenu
  • ⚡ controlla relè e dispositivi esterni

Foto
Foto

© ProgettiArduino.com 2026 - Fancello Salvatore
​ Layout, immagini e testi sono di esclusiva proprietà di www.progettiarduino.com 
Privacy Policy