Reaktionsspiel

Im Folgenden geht es darum, die Möglichkeiten eines 5-Tasten-Keyboards im Zusammenspiel mit einem Arduino zu erkunden. Das besondere daran ist, dass die Kommunikation zwischen Board und Arduino über einen einzelnen analogen Pin erfolgt. Dennoch wird jeder einzelne Tastendruck vom Arduino erkannt und kann so für die eigenen Zwecke genutzt werden.

Fertige Keyboards gibt es für kleines Geld im Internet – beispielsweise hier. Bastler können sich ein solches Board aber auch leicht selbst herstellen. Benötigt werden als Trägermaterial der Abschnitt einer Lochrasterplatine oder ähnliches, weiterhin 5 Taster, Widerstände und etwas Löterfahrung. Alle Details dazu finden sich in der Abbildung links.

Eine erste Idee zur Nutzung des Keyboards besteht darin, ein einfaches Konzentrationsspiel zu programmieren: Über ein LCD-Display sollen nach dem Zufallsprinzip in schneller Folge eine der 5 Tasten angezeigt werden (1. Taste – 4. Taste – 3. Taste usw.), die dann innerhalb kurzer Zeit gedrückt werden muss. Je nachdem ob das gelingt oder nicht, gibt es eine entsprechende Rückmeldung auf dem Display. Parallel dazu werden die erfolgreichen Versuche gezählt und im Vergleich mit der absoluten Zahl der gestellten Aufgaben angezeigt.

Um das zu realisieren werden neben den nötigen Steckbrücken, das Keyboard, ein LCD-Display mit I2C-Interface und ein Arduino-Board benötigt. Das I2C-Interface findet sich auf der Rückseite des Displays.

Anschlüsse:

I2C-Interface mit vier Anschlüssen (von oben nach unten): GND, VCC, SDA, SCL
Arduino   <-->    I2C

5V        <-->    VCC
GND       <-->    GND
A4        <-->    SDA
A5        <-->    SCL

Das Keyboard wird ebenfalls vom Arduino über 5V und GND mit Strom versorgt. Die Datenleitung führt zum analogen Pin 0 (A0). An der folgende Abbildung kann die Verkabelung noch einmal nachvollzogen werden.

Programmcode:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);  // das Display hat 20 Zeichen in jeweils vier Zeilen
int s;
int zahl = 0;
int gesamt = 0;
int tastenwerte[5] = {50, 200, 400, 600, 800};
int anzahl = 5; // Anzahl der Tasten
int messwert;  // Messwert
int taste = -1; 

void setup() {
  lcd.begin(); // Display wird gestartet
  lcd.backlight();  // Display wird beleuchtet
}

void loop() {
  s = random(1, 6);
  lcd.clear(); //Display wird gelöscht
  lcd.setCursor(0, 0); //0. Spalte, 1. Zeile
  lcd.print(s);
  lcd.print(". Taste");
  delay(2000);
  messwert = analogRead(0); // Messwerte auslesen
  taste = umwandeln(messwert); // Messwerte  in Zahlen 1 bis 5 umwandeln

  if (taste == s) { // Wenn taste gleich altertaste, dann ...
    zahl++;
    lcd.clear();
    lcd.print("Prima!"); //... gib "Prima!" aus ...
    //tone(8,392,500);
    //delay(500);
    //tone(8,440,1000); 
  }
  else {
    lcd.clear();
    lcd.print("Uups!"); //... andernfalls "Uups!"
    //tone(8, 262, 1000);
  }

  // Egebnisanzeige: Zahl der richtigen im Vergleich zu allen Aufgaben
  gesamt++;
  lcd.setCursor(0, 2); //0. Spalte, 2. Zeile
  lcd.print(zahl);
  lcd.print(" von ");
  lcd.print(gesamt);
  delay(2000);
  lcd.clear();
  delay(500);
}

int umwandeln(int input) {
  int k;
  for (k = 0; k < anzahl; k++) {
    if (input <  tastenwerte[k])
    {
      return k + 1;
    }
  }
}
oben: Lautsprecher, unten: Piezo-Buzzer

Die Erfolgs- und Misserfolgsanzeigen auf dem Display können auch akustisch untermalt werden. Dazu muss zusätzlich ein Lautsprecher oder ein Piezo-Buzzer an Pin 8 und GND des Arduino angeschlossen und die entsprechenden Passagen im obigen Code freigegeben werden (die doppelten Schrägstriche vor „tone“ und „delay“ entfernen).