Indice
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.
#include <LiquidCrystal_I2C.h>#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 50#define MAX_DELAY 500 LiquidCrystal_I2C lcd(0x27, 16, 2); 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(0, 0);  lcd.print("Testo scorrevole sul display LCD");  lcd.setCursor(0, 1);  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, 0, 1023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}#include <LiquidCrystal_I2C.h>#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 50#define MAX_DELAY 500 LiquidCrystal_I2C lcd(0x27, 16, 2); 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(0, 1);  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(0, 0);  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, 0, 1023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}#include <LiquidCrystal_I2C.h>#define POTENTIOMETER_PIN A0#define BUTTON_PIN 2#define MIN_DELAY 50#define MAX_DELAY 500 LiquidCrystal_I2C lcd(0x27, 16, 2); 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(0, 1);  lcd.print("Tech Maker");  lcd.setCursor(0, 0);  lcd.blink();} void loop() {  updateDirection();   if (!isRefresh()) {    return;  }   if (!reverseDirection) {    if (index < length) {      lcd.print(message[index]);      index++;    } else {      lcd.setCursor(0, 0);      lcd.print("                 ");      lcd.setCursor(0, 0);      index = 0;    }  } else {    if (index >= 0) {      index--;      lcd.setCursor(index, 0);      lcd.print(" ");      lcd.setCursor(index, 0);    } else {      lcd.setCursor(0, 0);      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, 0, 1023, MIN_DELAY, MAX_DELAY);  unsigned long currentTime = millis();  if (currentTime - refreshTime > threshold) {    refreshTime = currentTime;    return true;  }  return false;}#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(0x27, 16, 2); 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(0, 0);  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 / 5, 1);  lcd.write(byte(index % 5));  index++;} bool isRefresh() {  int value = analogRead(POTENTIOMETER_PIN);  unsigned int threshold = map(value, 0, 1023, 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,};In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei
 
  
  
  
  
  
 