🚀 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.
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:
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
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.
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
Pulsante SU
Pulsante GIÙ
Pulsante OK
Pulsante INDIETRO
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
💻 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");
}
============================================================
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:
👉 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.
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:
👉 È la base per creare pannelli di controllo Arduino completi.
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?
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