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