🎛️

LCD Keypad Shield Demo

Projekt P01 - Grundlagen des LCD Keypad Shields

Plus
LCD I2C
Digital Buttons
LiquidCrystal_I2C
1

Was du lernst

  • LCD Keypad Shield - Beliebtes Shield für Arduino Uno
  • Analoger Tasteneingang - 5 Tasten über einen Pin (A0)
  • Wertebereiche - Robuste Tastenerkennung mit Toleranzen
  • Code-Struktur - Konstanten, Hilfsfunktionen, Enums

Komponenten

Arduino Uno, LCD 1602 (parallel), 5 Taster mit Widerstandsnetzwerk

2

Das LCD Keypad Shield

Shield-Aufbau

  • LCD 1602 - 16 Zeichen x 2 Zeilen
  • 5 Tasten - SELECT, LEFT, DOWN, UP, RIGHT
  • 1 Analogpin A0 - Spannungsteiler für alle Tasten
  • Pins 4-9 - LCD-Steuerung (RS, EN, D4-D7)

Trick: Ein Pin für 5 Tasten

Jede Taste erzeugt durch Widerstände einen anderen Spannungswert an A0!

3

Analoge Tastenwerte

Typische ADC-Werte (0-1023)

  • RIGHT - ca. 0 (Bereich: 0-60)
  • UP - ca. 145 (Bereich: 60-200)
  • DOWN - ca. 329 (Bereich: 200-400)
  • LEFT - ca. 505 (Bereich: 400-600)
  • SELECT - ca. 741 (Bereich: 600-800)
  • NONE - ca. 1023 (> 800)

Wichtig: Wertebereiche nutzen!

Exakte Werte variieren je nach Shield. Bereiche sind robuster.

Code - Konstanten & Enum

#include <LiquidCrystal.h>

// LCD Pin-Definitionen (Shield-Standard)
const int PIN_RS = 8;
const int PIN_EN = 9;
const int PIN_D4 = 4;
const int PIN_D5 = 5;
const int PIN_D6 = 6;
const int PIN_D7 = 7;
const int PIN_BUTTONS = A0;

// Schwellwerte für Tastenerkennung
const int THRESHOLD_RIGHT  = 60;
const int THRESHOLD_UP     = 200;
const int THRESHOLD_DOWN   = 400;
const int THRESHOLD_LEFT   = 600;
const int THRESHOLD_SELECT = 800;

// Tasten-Enum für sauberen Code
enum Button { BTN_NONE, BTN_RIGHT, BTN_UP,
              BTN_DOWN, BTN_LEFT, BTN_SELECT };

Code - Hilfsfunktionen

LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_D4,
                  PIN_D5, PIN_D6, PIN_D7);

// Taste erkennen mit Wertebereichen
Button readButton() {
  int val = analogRead(PIN_BUTTONS);

  if (val < THRESHOLD_RIGHT)  return BTN_RIGHT;
  if (val < THRESHOLD_UP)     return BTN_UP;
  if (val < THRESHOLD_DOWN)   return BTN_DOWN;
  if (val < THRESHOLD_LEFT)   return BTN_LEFT;
  if (val < THRESHOLD_SELECT) return BTN_SELECT;

  return BTN_NONE;
}

// Tastenname als String
const char* getButtonName(Button btn) {
  switch(btn) {
    case BTN_RIGHT:  return "Rechts";
    case BTN_UP:     return "Hoch";
    case BTN_DOWN:   return "Runter";
    case BTN_LEFT:   return "Links";
    case BTN_SELECT: return "Select";
    default:         return "Keine";
  }
}

Code - Setup & Loop

void setup() {
  lcd.begin(16, 2);
  lcd.print("LCD Keypad Demo");
  lcd.setCursor(0, 1);
  lcd.print("Taste druecken!");
}

void loop() {
  static Button lastButton = BTN_NONE;
  Button currentButton = readButton();

  // Nur bei Änderung aktualisieren
  if (currentButton != lastButton) {
    lastButton = currentButton;

    if (currentButton != BTN_NONE) {
      lcd.clear();
      lcd.print("Taste:");
      lcd.setCursor(0, 1);
      lcd.print(getButtonName(currentButton));
      lcd.print(" (");
      lcd.print(analogRead(PIN_BUTTONS));
      lcd.print(")");
    }
  }
  delay(50);  // Entprellen
}
4

Code-Struktur erklärt

Gute Praktiken

  • Konstanten - Pins und Schwellwerte benannt
  • Enum - Lesbare Tastennamen statt Zahlen
  • Hilfsfunktionen - readButton() und getButtonName()
  • static Variable - Letzte Taste merken

Vorteil Wertebereiche

Funktioniert auch bei leicht abweichenden Shields oder Temperaturschwankungen!

5

Wokwi-Simulation

In Wokwi nachgebaut

Das LCD Keypad Shield wird aus Einzelkomponenten simuliert:

  • LCD 1602 (parallel, nicht I2C)
  • 5 Pushbuttons mit Widerstandsnetzwerk an A0
  • Widerstände erzeugen verschiedene Spannungen

Testen

Klicke auf verschiedene Buttons und beobachte die Anzeige!

🎛️

Geschafft!

Du kennst jetzt das LCD Keypad Shield!

Nächstes Projekt

P02: Multiclock - Uhr, Stoppuhr, Alarm und Timer

← →
1 / 10