Come animare un display LCD con Arduino

Come animare un display LCD con Arduino

Descrizione

Vuoi andare oltre le semplici scritte statiche su un display LCD con Arduino? In questo video tutorial ti mostro come realizzare effetti visivi e piccole animazioni per dare movimento ai tuoi progetti.

Scoprirai passo dopo passo come programmare e gestire testi dinamici e arricchire i tuoi display con caratteri personalizzati.

Potrai rendere unici i tuoi progetti elettronici, trasformando un normale display LCD in uno strumento creativo e originale.

Scarica le risorse

Progetto: Testo scorrevole (base)

Schema

Componenti

Codice

#include <LiquidCrystal_I2C.h>#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 50#define MAX_DELAY 500 LiquidCrystal_I2C lcd(0x27162); bool reverseDirection = false;int lastButtonState = LOW;unsigned long debounceTime = 0;unsigned long refreshTime = 0; void setup() {  pinMode(BUTTON_PIN, INPUT);  lcd.init();  lcd.backlight();  lcd.setCursor(00);  lcd.print("Testo scorrevole sul display LCD");  lcd.setCursor(01);  lcd.print("Tech Maker");  delay(1000);} void loop() {  updateDirection();   if (!isRefresh()) {    return;  }   if (!reverseDirection) {    lcd.scrollDisplayLeft();  } else {    lcd.scrollDisplayRight();  }} void updateDirection() {  int buttonState = digitalRead(BUTTON_PIN);  if (millis() - debounceTime > 50) {    if (buttonState == HIGH && lastButtonState == LOW) {      reverseDirection = !reverseDirection;      debounceTime = millis();    }  }  lastButtonState = buttonState;} bool isRefresh() {  int value = analogRead(POTENTIOMETER_PIN);  unsigned int threshold = map(value, 01023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}
scarica il file

Progetto: Testo scorrevole (avanzato)

Schema

Componenti

Codice

#include <LiquidCrystal_I2C.h>#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 50#define MAX_DELAY 500 LiquidCrystal_I2C lcd(0x27162); bool reverseDirection = false;int lastButtonState = LOW;unsigned long debounceTime = 0;unsigned long refreshTime = 0;const char *message = "Testo scorrevole che supera la dimensione del display LCD. ";const int length = strlen(message);int index = 0; void setup() {  pinMode(BUTTON_PIN, INPUT);  lcd.init();  lcd.backlight();  lcd.setCursor(01);  lcd.print("Tech Maker");} void loop() {  updateDirection();   if (!isRefresh()) {    return;  }   String buffer = "";  for (int i = 0; i < 16; i++) {    buffer += message[(index + i) % length];  }  lcd.setCursor(00);  lcd.print(buffer);   if (!reverseDirection) {    index++;    if (index >= length) {      index = 0;    }  } else {    index--;    if (index < 0) {      index = length - 1;    }  }} void updateDirection() {  int buttonState = digitalRead(BUTTON_PIN);  if (millis() - debounceTime > 50) {    if (buttonState == HIGH && lastButtonState == LOW) {      reverseDirection = !reverseDirection;      debounceTime = millis();    }  }  lastButtonState = buttonState;} bool isRefresh() {  int value = analogRead(POTENTIOMETER_PIN);  unsigned int threshold = map(value, 01023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}
scarica il file

Progetto: Effetto machina da scrivere

Schema

Componenti

Codice

#include <LiquidCrystal_I2C.h>#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 50#define MAX_DELAY 500 LiquidCrystal_I2C lcd(0x27162); bool reverseDirection = false;int lastButtonState = LOW;unsigned long debounceTime = 0;unsigned long refreshTime = 0;const char *message = "Testo scritto";const int length = strlen(message);int index = 0; void setup() {  pinMode(BUTTON_PIN, INPUT);  lcd.init();  lcd.backlight();  lcd.setCursor(01);  lcd.print("Tech Maker");  lcd.setCursor(00);  lcd.blink();} void loop() {  updateDirection();   if (!isRefresh()) {    return;  }   if (!reverseDirection) {    if (index < length) {      lcd.print(message[index]);      index++;    } else {      lcd.setCursor(00);      lcd.print("                 ");      lcd.setCursor(00);      index = 0;    }  } else {    if (index >= 0) {      index--;      lcd.setCursor(index, 0);      lcd.print(" ");      lcd.setCursor(index, 0);    } else {      lcd.setCursor(00);      lcd.print(message);      index = length;    }  }} void updateDirection() {  int buttonState = digitalRead(BUTTON_PIN);  if (millis() - debounceTime > 50) {    if (buttonState == HIGH && lastButtonState == LOW) {      reverseDirection = !reverseDirection;      debounceTime = millis();    }  }  lastButtonState = buttonState;} bool isRefresh() {  int value = analogRead(POTENTIOMETER_PIN);  unsigned int threshold = map(value, 01023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}
scarica il file

Progetto: Caratteri personalizzati

Schema

Componenti

Codice

#include <LiquidCrystal_I2C.h>#include "chars.h"#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 5#define MAX_DELAY 200 LiquidCrystal_I2C lcd(0x27162); unsigned long refreshTime = 0;int index = 0; void setup() {  pinMode(BUTTON_PIN, INPUT);  lcd.init();  lcd.backlight();  lcd.createChar(0, bar1);  lcd.createChar(1, bar2);  lcd.createChar(2, bar3);  lcd.createChar(3, bar4);  lcd.createChar(4, bar5);  lcd.createChar(5, smile);  lcd.createChar(6, check);  lcd.setCursor(00);  lcd.print("Caricamento...");} void loop() {  if (!isRefresh()) {    return;  }   if (index < 80) {    loading();  } else {    lcd.clear();    lcd.setCursor(4,0);    lcd.write(byte(6));    lcd.print(" Fatto!");    lcd.setCursor(7,1);    lcd.write(byte(5));     while(!digitalRead(BUTTON_PIN));     lcd.clear();    lcd.setCursor(0,0);    lcd.print("Caricamento...");    index = 0;  }} void loading() {  lcd.setCursor(index / 51);  lcd.write(byte(index % 5));  index++;} bool isRefresh() {  int value = analogRead(POTENTIOMETER_PIN);  unsigned int threshold = map(value, 01023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}
byte smile[8= {  B00000,  B01010,  B01010,  B00000,  B10001,  B01110,  B00000,  B00000,}; byte check[8= {  B00000,  B00001,  B00011,  B10110,  B11100,  B01000,  B00000,  B00000,}; byte bar1[8= {  B10000,  B10000,  B10000,  B10000,  B10000,  B10000,  B10000,  B10000,}; byte bar2[8= {  B11000,  B11000,  B11000,  B11000,  B11000,  B11000,  B11000,  B11000,}; byte bar3[8= {  B11100,  B11100,  B11100,  B11100,  B11100,  B11100,  B11100,  B11100,}; byte bar4[8= {  B11110,  B11110,  B11110,  B11110,  B11110,  B11110,  B11110,  B11110,}; byte bar5[8= {  B11111,  B11111,  B11111,  B11111,  B11111,  B11111,  B11111,  B11111,};
scarica il file

Arduino Software Hero

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

Iscriviti al corso online

Libri consigliati

In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei


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