Arduino Uno R4 - LCD-Tastenfeld-Shield
In diesem Leitfaden erkunden wir, wie man den Arduino Uno R4 mit dem LCD Keypad Shield verwendet – ein cooles kleines Gadget, das ein 16×2-LCD-Display mit sechs Tasten vereint (Rechts, Oben, Unten, Links, Auswahl und Zurücksetzen). Du lernst, wie es funktioniert, wie man es an deinen Arduino Uno R4 anschließt und wie man es Schritt für Schritt programmiert. Wir haben ein Verkabelungsbild und Code-Beispiele, damit es ganz einfach nachzuvollziehen ist!
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.
Dieses LCD-Keypad-Shield ist eine Kombination aus:
Ein 16x2 LCD (zeigt 2 Zeilen mit jeweils 16 Zeichen), das die LiquidCrystal-Bibliothek verwendet.
5 Tasten (Auf, Ab, Links, Rechts, Auswählen) alle an einen Pin (A0) angeschlossen.
Eine Reset-Taste zum Neustarten Ihres Arduino Uno R4.
Ein winziger Drehknopf (Potentiometer), um den Kontrast des Bildschirms einzustellen.
Die folgende Tabelle zeigt, wie das LCD Keypad Shield mit dem Arduino Uno R4 verbunden wird, wenn es darauf gestapelt wird.
| Shield Pin | Function | Arduino Uno R4 Pin |
| DB4 | Data | 4 |
| DB5 | Data | 5 |
| DB6 | Data | 6 |
| DB7 | Data | 7 |
| RS | Register Select | 8 |
| E | Enable | 9 |
| Analog A0 | Button Input | A0 |
Reset-Taste: Drück sie, und dein Arduino Uno R4 startet von vorne.
Knopf (Drehpotentiometer): Drehe daran, wenn der Bildschirm zu dunkel oder zu schwach beleuchtet ist.
Hier gibt es keine komplizierte Verkabelung! Stecken Sie einfach das LCD Keypad Shield direkt auf Ihren Arduino Uno R4. Die Pins passen sich von selbst an.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Siehe Der beste Weg, den Arduino Uno R4 und andere Komponenten mit Strom zu versorgen.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
Serial.begin(9600);
Serial.println("Started");
lcd.begin(16, 2);
lcd.print("Hello!");
delay(3000);
}
void loop() {
int key = analogRead(A0);
lcd.clear();
if (key < 50)
lcd.print("RIGHT");
else if (key < 200)
lcd.print("UP");
else if (key < 400)
lcd.print("DOWN");
else if (key < 600)
lcd.print("LEFT");
else if (key < 800)
lcd.print("SELECT");
else if (key < 1000)
lcd.print("RST");
else
lcd.print("Press key!");
delay(200);
}
Setze das LCD Keypad Shield auf dein Arduino Uno R4.
Verbinde das Arduino Uno R4 über das USB-Kabel mit deinem Computer.
Öffne die Arduino-IDE, wähle dein Board und den Port in der IDE.
Kopiere den obigen Code, füge ihn in die Arduino-IDE ein.
Klicke in der Arduino-IDE auf die Hochladen-Schaltfläche, um den Code auf den Arduino Uno R4 hochzuladen.
Drücke nacheinander die Tasten des Shields.
Beobachte, wie das LCD anzeigt, welche du gedrückt hast.
Wenn der Bildschirm leer ist? Versuchen Sie Folgendes:
Überprüfe noch einmal, ob das Shield fest eingesteckt ist.
Drehe am Knopf, um den Kontrast einzustellen.
Stelle sicher, dass der Code korrekt ist und der Arduino Uno R4 eingeschaltet ist.
Möchtest du, dass dein Code professionell aussieht? Hier ist eine raffiniertere Version mit sauberen Funktionen:
#include <LiquidCrystal.h>
const int KEY_RIGHT = 0;
const int KEY_UP = 1;
const int KEY_DOWN = 2;
const int KEY_LEFT = 3;
const int KEY_SELECT = 4;
const int KEY_NONE = 5;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int getKey() {
int analogValue = analogRead(A0);
if (analogValue < 50) return KEY_RIGHT;
else if (analogValue < 200) return KEY_UP;
else if (analogValue < 400) return KEY_DOWN;
else if (analogValue < 600) return KEY_LEFT;
else if (analogValue < 800) return KEY_SELECT;
else return KEY_NONE;
}
void setup() {
Serial.begin(9600);
Serial.println("Started");
lcd.begin(16, 2);
lcd.print("Hello!");
delay(3000);
}
void loop() {
lcd.clear();
int key = getKey();
switch (key) {
case KEY_RIGHT:
lcd.print("RIGHT");
break;
case KEY_UP:
lcd.print("UP");
break;
case KEY_DOWN:
lcd.print("DOWN");
break;
case KEY_LEFT:
lcd.print("LEFT");
break;
case KEY_SELECT:
lcd.print("SELECT");
break;
default:
lcd.print("Press key!");
break;
}
delay(200);
}
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:
#include <LiquidCrystal.h>
#include <Servo.h>
#include <DHT.h>
#define DHT_PIN 2
#define DHT_TYPE DHT11
#define SERVO_PIN 3
#define RED_LED_PIN 11
#define YELLOW_LED_PIN 12
#define GREEN_LED_PIN 13
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
DHT dht(DHT_PIN, DHT_TYPE);
Servo servo;
enum Button {
BUTTON_NONE,
BUTTON_RIGHT,
BUTTON_UP,
BUTTON_DOWN,
BUTTON_LEFT,
BUTTON_SELECT
};
enum State {
MAIN_MENU,
SENSOR_MENU,
TEMPERATURE_VIEW,
HUMIDITY_VIEW,
SERVO_CONTROL,
LED_MENU,
RED_LED_CONTROL,
YELLOW_LED_CONTROL,
GREEN_LED_CONTROL,
AUTO_MODE
};
State currentState = MAIN_MENU;
const char* mainMenu[] = {
"SENSOR",
"SERVO",
"LED",
"AUTO MODE"
};
const char* sensorMenu[] = {
"TEMPERATURE",
"HUMIDITY"
};
const char* ledMenu[] = {
"RED",
"YELLOW",
"GREEN"
};
int mainMenuIndex = 0;
int sensorMenuIndex = 0;
int ledMenuIndex = 0;
int servoAngle = 90;
bool redLEDState = false;
bool yellowLEDState = false;
bool greenLEDState = false;
float temperature = 0.0;
float humidity = 0.0;
unsigned long lastSensorRead = 0;
unsigned long lastAutoDisplay = 0;
const unsigned long sensorInterval = 2000;
const unsigned long autoDisplayInterval = 2000;
bool autoDisplayPage = false;
Button readButton() {
int value = analogRead(A0);
if (value < 50)
return BUTTON_RIGHT;
if (value < 200)
return BUTTON_UP;
if (value < 400)
return BUTTON_DOWN;
if (value < 600)
return BUTTON_LEFT;
if (value < 800)
return BUTTON_SELECT;
return BUTTON_NONE;
}
void waitButtonRelease() {
while (readButton() != BUTTON_NONE) {
delay(10);
}
delay(100);
}
void displayMainMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MAIN MENU");
lcd.setCursor(0, 1);
lcd.print("> ");
lcd.print(mainMenu[mainMenuIndex]);
}
void displaySensorMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SENSOR");
lcd.setCursor(0, 1);
lcd.print("> ");
lcd.print(sensorMenu[sensorMenuIndex]);
}
void displayLEDMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LED CONTROL");
lcd.setCursor(0, 1);
lcd.print("> ");
lcd.print(ledMenu[ledMenuIndex]);
}
void readSensor() {
float newTemperature = dht.readTemperature();
float newHumidity = dht.readHumidity();
if (!isnan(newTemperature)) {
temperature = newTemperature;
}
if (!isnan(newHumidity)) {
humidity = newHumidity;
}
}
void showTemperature() {
readSensor();
lcd.setCursor(0, 0);
lcd.print("TEMPERATURE ");
lcd.setCursor(0, 1);
lcd.print(temperature, 1);
lcd.print((char)223);
lcd.print("C ");
}
void showHumidity() {
readSensor();
lcd.setCursor(0, 0);
lcd.print("HUMIDITY ");
lcd.setCursor(0, 1);
lcd.print(humidity, 1);
lcd.print("% ");
}
void displayServoControl() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SERVO CONTROL");
lcd.setCursor(0, 1);
lcd.print("ANGLE: ");
lcd.print(servoAngle);
lcd.print((char)223);
}
void displayLEDControl(const char* ledName, bool state) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(ledName);
lcd.setCursor(0, 1);
if (state) {
lcd.print("STATUS: ON");
} else {
lcd.print("STATUS: OFF");
}
}
void displayAutoPage1() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("HUM:");
lcd.print(humidity, 0);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("TEMP:");
lcd.print(temperature, 1);
lcd.print(" C");
}
void displayAutoPage2() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LED: ");
if (temperature < 25.0) {
lcd.print("GREEN");
}
else if (temperature < 30.0) {
lcd.print("YELLOW");
}
else {
lcd.print("RED");
}
lcd.setCursor(0, 1);
lcd.print("SERVO: ");
lcd.print(servoAngle);
lcd.print(" DEG");
}
void runAutoMode() {
readSensor();
if (temperature < 31.3) {
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
servoAngle = 0;
servo.write(servoAngle);
}
else if (temperature < 31.5) {
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
servoAngle = 90;
servo.write(servoAngle);
}
else {
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, HIGH);
servoAngle = 180;
servo.write(servoAngle);
}
}
void handleMainMenu(Button button) {
if (button == BUTTON_UP) {
mainMenuIndex--;
if (mainMenuIndex < 0) {
mainMenuIndex = 3;
}
displayMainMenu();
}
else if (button == BUTTON_DOWN) {
mainMenuIndex++;
if (mainMenuIndex > 3) {
mainMenuIndex = 0;
}
displayMainMenu();
}
else if (button == BUTTON_SELECT) {
switch (mainMenuIndex) {
case 0:
currentState = SENSOR_MENU;
sensorMenuIndex = 0;
displaySensorMenu();
break;
case 1:
currentState = SERVO_CONTROL;
displayServoControl();
break;
case 2:
currentState = LED_MENU;
ledMenuIndex = 0;
displayLEDMenu();
break;
case 3:
currentState = AUTO_MODE;
autoDisplayPage = false;
lastSensorRead = millis();
lastAutoDisplay = millis();
runAutoMode();
displayAutoPage1();
break;
}
}
}
void handleSensorMenu(Button button) {
if (button == BUTTON_UP) {
sensorMenuIndex--;
if (sensorMenuIndex < 0) {
sensorMenuIndex = 1;
}
displaySensorMenu();
}
else if (button == BUTTON_DOWN) {
sensorMenuIndex++;
if (sensorMenuIndex > 1) {
sensorMenuIndex = 0;
}
displaySensorMenu();
}
else if (button == BUTTON_SELECT) {
if (sensorMenuIndex == 0) {
lcd.clear();
currentState = TEMPERATURE_VIEW;
lastSensorRead = millis();
showTemperature();
}
else {
lcd.clear();
currentState = HUMIDITY_VIEW;
lastSensorRead = millis();
showHumidity();
}
}
else if (button == BUTTON_LEFT) {
currentState = MAIN_MENU;
displayMainMenu();
}
}
void handleTemperatureView(Button button) {
if (button == BUTTON_LEFT || button == BUTTON_SELECT) {
currentState = SENSOR_MENU;
displaySensorMenu();
}
}
void handleHumidityView(Button button) {
if (button == BUTTON_LEFT || button == BUTTON_SELECT) {
currentState = SENSOR_MENU;
displaySensorMenu();
}
}
void handleServoControl(Button button) {
if (button == BUTTON_UP) {
servoAngle++;
if (servoAngle > 180) {
servoAngle = 180;
}
servo.write(servoAngle);
displayServoControl();
}
else if (button == BUTTON_DOWN) {
servoAngle--;
if (servoAngle < 0) {
servoAngle = 0;
}
servo.write(servoAngle);
displayServoControl();
}
else if (button == BUTTON_RIGHT) {
servoAngle += 10;
if (servoAngle > 180) {
servoAngle = 180;
}
servo.write(servoAngle);
displayServoControl();
}
else if (button == BUTTON_LEFT) {
servoAngle -= 10;
if (servoAngle < 0) {
servoAngle = 0;
}
servo.write(servoAngle);
displayServoControl();
}
else if (button == BUTTON_SELECT) {
currentState = MAIN_MENU;
displayMainMenu();
}
}
void handleLEDMenu(Button button) {
if (button == BUTTON_UP) {
ledMenuIndex--;
if (ledMenuIndex < 0) {
ledMenuIndex = 2;
}
displayLEDMenu();
}
else if (button == BUTTON_DOWN) {
ledMenuIndex++;
if (ledMenuIndex > 2) {
ledMenuIndex = 0;
}
displayLEDMenu();
}
else if (button == BUTTON_SELECT) {
switch (ledMenuIndex) {
case 0:
currentState = RED_LED_CONTROL;
displayLEDControl("RED LED", redLEDState);
break;
case 1:
currentState = YELLOW_LED_CONTROL;
displayLEDControl("YELLOW LED", yellowLEDState);
break;
case 2:
currentState = GREEN_LED_CONTROL;
displayLEDControl("GREEN LED", greenLEDState);
break;
}
}
else if (button == BUTTON_LEFT) {
currentState = MAIN_MENU;
displayMainMenu();
}
}
void handleRedLED(Button button) {
if (button == BUTTON_RIGHT) {
redLEDState = !redLEDState;
digitalWrite(RED_LED_PIN, redLEDState ? HIGH : LOW);
displayLEDControl("RED LED", redLEDState);
}
else if (button == BUTTON_LEFT) {
currentState = LED_MENU;
displayLEDMenu();
}
}
void handleYellowLED(Button button) {
if (button == BUTTON_RIGHT) {
yellowLEDState = !yellowLEDState;
digitalWrite(YELLOW_LED_PIN, yellowLEDState ? HIGH : LOW);
displayLEDControl("YELLOW LED", yellowLEDState);
}
else if (button == BUTTON_LEFT) {
currentState = LED_MENU;
displayLEDMenu();
}
}
void handleGreenLED(Button button) {
if (button == BUTTON_RIGHT) {
greenLEDState = !greenLEDState;
digitalWrite(GREEN_LED_PIN, greenLEDState ? HIGH : LOW);
displayLEDControl("GREEN LED", greenLEDState);
}
else if (button == BUTTON_LEFT) {
currentState = LED_MENU;
displayLEDMenu();
}
}
void handleAutoMode(Button button) {
if (button == BUTTON_LEFT || button == BUTTON_SELECT) {
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
redLEDState = false;
yellowLEDState = false;
greenLEDState = false;
servoAngle = 90;
servo.write(servoAngle);
currentState = MAIN_MENU;
displayMainMenu();
}
}
void setup() {
lcd.begin(16, 2);
dht.begin();
servo.attach(SERVO_PIN);
servo.write(servoAngle);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SMART CONTROL");
lcd.setCursor(0, 1);
lcd.print("STATION");
delay(2000);
displayMainMenu();
}
void loop() {
Button button = readButton();
if (button != BUTTON_NONE) {
switch (currentState) {
case MAIN_MENU: handleMainMenu(button); break;
case SENSOR_MENU: handleSensorMenu(button); break;
case TEMPERATURE_VIEW: handleTemperatureView(button); break;
case HUMIDITY_VIEW: handleHumidityView(button); break;
case SERVO_CONTROL: handleServoControl(button); break;
case LED_MENU: handleLEDMenu(button); break;
case RED_LED_CONTROL: handleRedLED(button); break;
case YELLOW_LED_CONTROL: handleYellowLED(button); break;
case GREEN_LED_CONTROL: handleGreenLED(button); break;
case AUTO_MODE: handleAutoMode(button); break;
}
waitButtonRelease();
}
if (currentState == AUTO_MODE) {
if (millis() - lastSensorRead >= sensorInterval) {
lastSensorRead = millis();
runAutoMode();
}
if (millis() - lastAutoDisplay >= autoDisplayInterval) {
lastAutoDisplay = millis();
autoDisplayPage = !autoDisplayPage;
if (autoDisplayPage) {
displayAutoPage2();
} else {
displayAutoPage1();
}
}
}
if (currentState == TEMPERATURE_VIEW || currentState == HUMIDITY_VIEW) {
if (millis() - lastSensorRead >= sensorInterval) {
lastSensorRead = millis();
if (currentState == TEMPERATURE_VIEW) {
showTemperature();
} else if (currentState == HUMIDITY_VIEW) {
showHumidity();
}
}
}
}
Brauchst du mehr LCD-Tricks? Schau dir dieses Arduino LiquidCrystal LCD-Tutorial an, um weitere coole Ideen zu bekommen.
Das war's! Du bist bereit, mit deinem LCD Keypad Shield zu spielen. Viel Spaß beim Bauen!