Arduino - LCD 20×4
In diesem Arduino-LCD-20x4-I2C-Tutorial lernen wir, wie man ein LCD 20x4 (Flüssigkristallanzeige) über die I2C-Schnittstelle mit dem Arduino-Board verbindet.
Oder Sie können die folgenden Kits kaufen:
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.
Kaufhinweis: Eine weitere Möglichkeit ist, das LCD I2C-Display zu erstellen, indem Sie LCD 2004 Display und PCF8574 I2C Adapter Module kombinieren.
LCD 20x4 I2C verwendet die I2C-Schnittstelle, daher hat es 4 Pins:
GND-Pin: muss mit GND (0 V) verbunden werden.
VCC-Pin: die Stromversorgung für das LCD, muss mit VCC (5 V) verbunden werden.
SDA-Pin: I2C-Datenleitung
SCL-Pin: I2C-Taktsignal
LCD I2C 20x4 umfasst 20 Spalten und 4 Zeilen. Die Spalten und Zeilen beginnen bei 0.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
| LCD I2C | Arduino Uno, Nano | Arduino Mega |
| Vin | 5V | 5V |
| GND | GND | GND |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Dank der DIYables_LCD_I2C-Bibliothek ist die Verwendung des LCDs ein Kinderspiel.
#include <DIYables_LCD_I2C.h>
DIYables_LCD_I2C lcd(0x27, 20, 4);
lcd.init();
lcd.backlight();
lcd.setCursor(column_index, row_index);
lcd.print("Hello World!");
※ Notiz:
Die I2C-Adresse des LCD kann je nach Hersteller variieren. Im Code haben wir 0x27 verwendet, das vom Hersteller DIYables festgelegt ist.
#include <DIYables_LCD_I2C.h>
DIYables_LCD_I2C lcd(0x27, 20, 4);
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("LCD 20x4");
lcd.setCursor(0, 1);
lcd.print("I2C Address: 0x27");
lcd.setCursor(0, 2);
lcd.print("DIYables");
lcd.setCursor(0, 3);
lcd.print("www.diyables.io");
}
void loop() {
}
Navigieren Sie zum Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
Suchen Sie "DIYables LCD I2C", dann finden Sie die DIYables_LCD_I2C-Bibliothek von DIYables.
Klicken Sie auf die Install-Schaltfläche, um die DIYables_LCD_I2C-Bibliothek zu installieren.
Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
Klicken Sie in der Arduino IDE auf die Schaltfläche Hochladen, um den Code auf den Arduino hochzuladen
Sehen Sie das Ergebnis auf dem LCD
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.
Die folgende Video-Demo verwendet den folgenden Code. Beachte, dass das Video Arduino Uno R4 zeigt, funktioniert aber identisch für Arduino Uno R3:
#include <Wire.h>
#include <DIYables_LCD_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
DIYables_LCD_I2C lcd(0x27, 20, 4);
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
Servo doorServo;
#define SERVO_PIN 6
#define BUZZER 8
byte adminUID[4] = {0x3C, 0x7F, 0xB3, 0x02};
enum State { IDLE, SCANNING, GRANTED, DENIED, LOCKED };
State systemState = IDLE;
int failCount = 0;
unsigned long stateTime = 0;
unsigned long lockTime = 0;
void beepOK() {
for (int i = 0; i < 2; i++) {
digitalWrite(BUZZER,HIGH);
delay(100);
digitalWrite(BUZZER,LOW);
delay(50);
}
}
void beepFail() {
for (int i = 0; i < 3; i++) {
digitalWrite(BUZZER,HIGH);
delay(150);
digitalWrite(BUZZER,LOW);
delay(80);
}
}
void beepLock() {
digitalWrite(BUZZER,HIGH);
delay(300);
digitalWrite(BUZZER,LOW);
}
void showIdle() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SYSTEM READY");
lcd.setCursor(0,1); lcd.print("PLEASE SCAN CARD");
lcd.setCursor(0,2); lcd.print("DOOR: LOCKED");
lcd.setCursor(0,3); lcd.print("SECURITY: ACTIVE");
Serial.println("[STATE] IDLE");
systemState = IDLE;
}
void showScanning() {
lcd.clear();
lcd.setCursor(0,1);
lcd.print("SCANNING CARD...");
Serial.println("[STATE] SCANNING");
systemState = SCANNING;
}
void showGranted() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SYSTEM: GRANTED");
lcd.setCursor(0,1); lcd.print("USER: ADMIN");
lcd.setCursor(0,2); lcd.print("OPENING DOOR...");
lcd.setCursor(0,3); lcd.print("AUTO LOCK 3s");
doorServo.write(90);
beepOK();
stateTime = millis();
systemState = GRANTED;
Serial.println("[STATE] GRANTED");
}
void showDenied(byte *uid) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SYSTEM: DENIED");
lcd.setCursor(0,1); lcd.print("UID: ");
for (byte i=0;i<4;i++) {
lcd.print(uid[i], HEX);
lcd.print(" ");
}
lcd.setCursor(0,2); lcd.print("ACCESS BLOCKED");
failCount++;
lcd.setCursor(0,3);
lcd.print("FAIL: ");
lcd.print(failCount);
lcd.print("/3");
beepFail();
stateTime = millis();
systemState = DENIED;
Serial.println("[STATE] DENIED");
}
bool isAdmin(byte *uid) {
for (byte i=0;i<4;i++) {
if (uid[i] != adminUID[i]) return false;
}
return true;
}
void lockSystem() {
systemState = LOCKED;
lcd.clear();
lcd.setCursor(0,1);
lcd.print("SYSTEM LOCKED!");
lcd.setCursor(0,2);
lcd.print("TOO MANY FAILS");
doorServo.write(0);
beepLock();
Serial.println("[STATE] LOCKED");
delay(3000);
failCount = 0;
showIdle();
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
SPI.begin();
rfid.PCD_Init();
doorServo.attach(SERVO_PIN);
doorServo.write(0);
pinMode(BUZZER, OUTPUT);
showIdle();
}
void loop() {
if (failCount >= 3 && systemState != LOCKED) {
lockSystem();
return;
}
if (systemState == DENIED && millis() - stateTime > 2000) {
showIdle();
}
if (systemState == GRANTED && millis() - stateTime > 3000) {
doorServo.write(0);
beepLock();
showIdle();
}
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
showScanning();
byte *uid = rfid.uid.uidByte;
Serial.print("UID: ");
for (byte i=0;i<rfid.uid.size;i++) {
Serial.print(uid[i], HEX);
Serial.print(" ");
}
Serial.println();
delay(300);
if (isAdmin(uid)) {
showGranted();
} else {
showDenied(uid);
}
rfid.PICC_HaltA();
}