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