Für ein Mathe-Lernspiel wollte ich eine Eingabemöglichkeit für Zahlen haben. Ich habe mich nach Tastaturen umgesehen und das MPR121 Touchpad mit 12 Feldern gefunden.
Dieses sollte einfach über I2C anzuschliessen sein... Leider war dann doch ein längerer Dialog mit einem Freund (Danke, Steini!) und das Graben in dem Sparkfun Git (siehe unten) notwendig, um das Touchpad zum Laufen zu bringen.
Geholfen hat folgende Dokumentation: https://learn.sparkfun.com/tutorials/mpr121-hookup-guide
Hier sind die Initialisierungswerte zu finden: https://github.com/sparkfun/MPR121_Capacitive_Touch_Breakout/blob/master/Firmware/MPR121Q/Arduino%20Sketch/mpr121.h
Das MPR121 Touch Pad kommt in zwei Teilen, Pad und Pins. Die Pins muss man entsprechend einlöten. Der MPR121 ist dann sehr einfach mit einem Grove/I2C Kabel an den Calliope Mini anzuschliessen:
Gelb = SCL
Weiss = SDA
Rot = VCC (3.3V)
Schwarz = GND
Den IRQ Pin muss man nicht mit dem Calliope verbinden.
Ich hatte erwartet, dass der MPR121 Touch Sensor mit dem Calliope I2C Scanner zu finden ist. Das ist aber nicht der Fall, denn der MPR121 ist, sobald er Strom hat, erstmal im Stop Modus und wartet auf die Initialisierung. D.h. er reagiert auch nicht auf die “Ansprache” des I2C Scanners auf Register 0.
Zuerst habe ich angenommen, dass der MPR121 nur “aktiviert” werden muss, also z.B. mit dem Schreiben eines Wertes an 0x5E, und dann schon “irgendwie” funktioniert, also für alle Tasten einen Wert liefert etc. Das ist aber nicht der Fall, es liefern dann nicht alle Tasten einen Wert bei Berührung, sondern nur 4 bis 6.
Bei der Betrachtung des Sparkfun MPR121 Beispiel-Code wird klar, dass der MPR121 immer zu initialisieren ist und zwar mit einer ganzen Reihe von Befehlen, die Werte an verschiedene Register schreiben.
Wie man das in JavaScript richtig macht, habe ich mir bei dem Calliope Farbsensor Projekt abgeguckt und dann den Initialisierung-Code und die Parameter in JavaScript zusammengeführt. Der folgende Befehl schreibt z.B. den Wert 0x0C an das Register 0x5E bei Adresse 0x5A (default I2C Adresse des MPR121) und aktiviert damit die 12 Touch Felder:
pins.i2cWriteNumber(0x5A, 0x5E0C, NumberFormat.UInt16BE)
Der Projekt JavaScript Code verwendet für die bessere Lesbarkeit Hex-Werte für die Initialisierung, dann aber dezimale Werte für die jeweiligen Tastenwerte, weil ich die durch Anzeige auf dem Calliope ermittelt habe. Für die bessere Lesbarkeit solle ich hier eine binäre Darstellung verwenden, das hole ich hoffentlich noch nach.
Der Projekt Code gibt jetzt erstmal nur die "Taste" (0-11) auf dem Display des Calliope wieder, die gedrückt wurde.
Comments