Tutorial Arduino #32

Encoder rotativo

Encoder rotativo (menu sul display LCD) | Tutorial Arduino ITA #32
Tutorial Arduino #31: Display a matrice 8x8 con il LED driver MAX7219
Tutorial Arduino #31
Display a matrice 8x8 con il LED driver MAX7219

Descrizione

Nella vasta gamma di dispositivi di input disponibili per i progetti di Arduino, l'encoder rotativo spicca per la sua versatilità e facilità d'uso. Immagina questo componente come il ponte tra il movimento fisico e il mondo digitale, traducendo le tue azioni in segnali digitali che Arduino può comprendere.

Imparerai a collegare l'encoder ai pin di Arduino, comprendendo il ruolo dei vari pin come CLK, DT e, se presente, il pulsante integrato. Oltre all'aspetto hardware, esamineremo anche la gestione del movimento rotativo e del pulsante attraverso nello sketch di Arduino. Questo ti consentirà di interpretare i segnali provenienti dall'encoder e di reagire di conseguenza, aprendo la strada a una varietà di applicazioni interattive.

Infine, esploreremo la creazione di un menu sul display LCD controllato tramite l'encoder rotativo. Questo processo coinvolge la scrittura di codice che risponde alle rotazioni e alle pressioni del pulsante, consentendo agli utenti di navigare e selezionare opzioni sul display. Grazie a questa guida, sarai in grado di sfruttare appieno il potenziale dell'encoder rotativo nei tuoi progetti Arduino, aggiungendo un livello di interattività e controllo che arricchirà l'esperienza dell'utente finale.

Scarica le risorse

Progetto: Encoder

Schema

Componenti

Codice

#include <Encoder.h>#define DT_PIN 2#define CLK_PIN 3#define BUTTON_PIN 4 Encoder encoder(DT_PIN, CLK_PIN); int lastEncoderValue = 0;int lastButtonState = LOW; void setup() {  Serial.begin(9600);  pinMode(BUTTON_PIN, INPUT_PULLUP);} void loop() {  int encoderValue = encoder.read() / 4;  int buttonState = !digitalRead(BUTTON_PIN);   if (encoderValue != lastEncoderValue) {    Serial.println("Encoder: " + String(encoderValue));  }  lastEncoderValue = encoderValue;   if (buttonState != lastButtonState && buttonState == HIGH) {    encoder.write(0);    delay(200);  }  lastButtonState = buttonState;}
scarica il file

Progetto: Menu sul display LCD

Schema

Componenti

Codice

#include <Encoder.h>#include <LiquidCrystal_I2C.h>#define DT_PIN 2#define CLK_PIN 3#define BUTTON_PIN 4#define MENU_LENGTH 5 Encoder encoder(DT_PIN, CLK_PIN);LiquidCrystal_I2C lcd(0x27162); int lastEncoderValue = 0;int lastButtonState = LOW;int currentMenu = 0;int lastMenu = -1;bool isMenuSelected = false; void setup() {  pinMode(BUTTON_PIN, INPUT_PULLUP);  lcd.init();  lcd.backlight();  lcd.clear();} void loop() {  int buttonState = !digitalRead(BUTTON_PIN);  if (buttonState != lastButtonState && buttonState == HIGH) {    isMenuSelected = !isMenuSelected;    if (isMenuSelected) {      selectMenu(currentMenu);      lastMenu = -1;    } else {      lastEncoderValue = 0;      encoder.write(lastEncoderValue);    }    delay(200);  }  lastButtonState = buttonState;   if (isMenuSelected) {    return;  }   currentMenu = constrainMenu(currentMenu + readDelta());  if (currentMenu != lastMenu) {    showMenu(currentMenu);    lastMenu = currentMenu;  }} int readDelta() {  int value = encoder.read() / 4;  int delta = value - lastEncoderValue;  lastEncoderValue = value;  return delta;} int constrainMenu(int value) {  return value - MENU_LENGTH * floor((float) value / MENU_LENGTH);} void printCentered(String text, int row) {  lcd.setCursor((16 - text.length()) / 2, row);  lcd.print(text);} void showMenu(int menu) {  lcd.clear();  printCentered("MENU"0);  switch (menu) {    case 0: printCentered("01 - opzione 1"1); break;    case 1: printCentered("02 - opzione 2"1); break;    case 2: printCentered("03 - opzione 3"1); break;    case 3: printCentered("04 - opzione 4"1); break;    case 4: printCentered("05 - opzione 5"1); break;  }} void selectMenu(int menu) {  lcd.clear();  printCentered("Hai scelto:"0);  switch (menu) {    case 0: printCentered("opzione 1"1); break;    case 1: printCentered("opzione 2"1); break;    case 2: printCentered("opzione 3"1); break;    case 3: printCentered("opzione 4"1); break;    case 4: printCentered("opzione 5"1); break;  }}
scarica il file

Arduino Software Hero

Vuoi imparare a programmare Arduino, ma non sai da dove cominciare?

Iscriviti al corso online

Libri consigliati


Tutorial consigliati

E-commerce di elettronica

Sul nostro negozio online trovi tutti i componenti usati nei tutorial.
Inoltre hai un'ampia scelta di prodotti tra:

  • Arduino
  • Raspberry Pi
  • Sensori
  • Robotica
  • Componenti elettronici
  • Accessori

Compra online, ricevi comodamente a casa

Visita il negozio