Sainsmart LCD Keypad Library

Auf Ebay und Amazon taucht es massenweise auf: Das SainSmart 1602 LCD Keypad Shield.

Meist wird es im Paket mit einem Sainsmart Mega oder Uno angeboten. Diese Mega- und Uno-Boards entsprechen ziemlich genau den Arduino-Boards und lassen sich auch mit der Arduino IDE (Programmiersoftware) programmieren, was dank der OpenSource Politik von Arduino auch so gewollt ist. Die Sainsmart-Produkte sind zwar billiger, dafür unterstützt man beim Kauf eines echten Arduino die dahinter stehende Arbeit, bekommt ein „Thank-you-for-supporting“-Heft, eine schicke Verpackung und 6 Aufkleber.

Worum es hier jedoch eigentlich gehen soll: Die Firma Sainsmart bietet auf ihrer Webseite eine Bibliothek zum Ansteuern des Tastenfelds des LCD Keypad Shields an. Diese Bibliothek ist leider wirklich, wirklich schlimm, wenn nicht sogar falsch programmiert, weshalb ich hier jetzt gerne ein wenig bashing betreiben würde. Stattdessen gibt es hier aber nur den Ausweg: Unter https://github.com/Phaiax/sainsmartkeypad gibt es eine Bibliothek (für Arduino1.0), die es hoffentlich viel Besser macht. Please Fork!

Ein Beispiel ist nie verkehrt (ich werde es auch gleich mal auf Github hochladen). Erstellt einfach zwei neue Dateien im Arduino-Sketch (der Pfeil ganz rechts in der Dateileiste) mit den Namen ’sainsmartkeypad.h‘ und ’sainsmartkeypad.cpp‘ und kopiert den Code der entsprechenden Dateien von Github in diese Dateien. Schau in den Quellcode der Headerdatei um die erweiterten Einstellungsmöglichkeiten kennenzulernen. Die Hauptdatei könnte dann Beispielsweise so aussehen:

#include <LiquidCrystal.h>

#include "Arduino.h"

// github.com/Phaiax/sainsmartkeypad
#include "sainsmartkeypad.h"

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
SainsmartKeypad keypad(0);
int value = 0;
uint8_t key;

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Keypad Example");
}

void loop() {
  key = keypad.getKey_fastscroll();

  // Try the other possibilities:
  // (Only one at a time.
  //  fastscroll, waitrelease and periodic
  //  won't work next to each other.)

  //key = keypad.getKey_waitrelease(); // without fastscroll but usable
  //key = keypad.getKey_periodic(); // not quite usable
  //key = keypad.getKey_instant(); // not quite usable

  if(key != SAMPLE_WAIT) // Do not refresh screen every loop
  {
     switch(key)
     {
       case UP_KEY:
        value++;
        break;
       case DOWN_KEY:
        value--;
        break;
     }
     lcd.setCursor(5,1);
     lcd.print(value);
     lcd.print("        ");
  }
}

 

 

13 comments

  1. bob sagt:

    Ich nutze es (normalerweise kommentiere ich ja grundsätzlich nicht (: )

  2. Stefan sagt:

    Prima Bibliothek um den Einstieg mit dem Sainsmart LCD Keypad Shield zu finden. Dankesehr! 🙂

  3. Blauschi sagt:

    Ohne dieser Bibliothek wäre es mir als Neueinsteiger sicher nicht gelungen mit dem Tastenfeld etwas anzufangen. Herzlichen Dank für die Vorarbeit!!

  4. daniel sagt:

    Danke für die Bibliothek! Wir verwenden sie bei unserem Projekt.
    http://www.halecker.de/kameraslider/2013/02/12/lcd-keypad-shield/

  5. Lesejens sagt:

    Danke für die Library! Bei mir hatten zuerst nicht alle Taster zuverlässig funktioniert. Das Fehlerbild war bei meinen beiden Unos (Arduino und Sainsmart)gleich.
    Ich habe die erlaubte Bandbreite für die Analogwerte pauschel von 15 auf 50 erhöht.

    //static int DEFAULT_THRESHOLD = 15;
    static int DEFAULT_THRESHOLD = 50;

    Jetzt gehts auch bei 35°C im Zimmer.

    Nochmals Danke!

  6. AlbertoBonn sagt:

    Danke für den coolen Tip. Läuft bestens!

  7. branther sagt:

    Prima Sache, vielen Dank.
    Kleiner Verbesserungsvorschlag:
    Ich habe oft INT-Werte einzugeben, leider dauert das ewig bis 32000 auf dem Display steht.
    Kann man das ganze eventuell noch erweitern, wobei die Zeit der gedrückten Taste abgefragt und je länger sie gedrückt wird das Increment um 1, 10, 100 oder 500 addiert wird?
    Bsp:
    kurz Drücken, Zähler um eins dec./inc..
    länger drücken, zähler sichtbar! hochzählen
    noch länger drücken, zähler schneller hochzählen
    usw…
    irgendwie alle 5sec schnellerwerden lassen.
    beste grüße
    branther

  8. deski sagt:

    Dank Lesejens Tip läuft alles perfect!
    War mein erster versuch mit Arduino und ich dachte die Taste bis auf UP und Reight sind def.. b.z.w. der Wiederstand.
    Hab dann DEFAULT_THRESHOLD auch auf 50 erhöht und somit läuft es bei 23,8°C sicher.
    Danke für die lib! Da die Module hier Scheibenweise einfliegen, werde ich derweil mal in ruhe weiterlesen.

  9. max sagt:

    verzweifele schon am Seutpd des Displayshields, egal welche Sketche ich hochlade, werden in der ersten zeile nur vierecke angezeigt, in der zweiten nichts…

  10. David sagt:

    Ich habe lange nach dem Problem gesucht, das dazu führte, dass mehrere getestete LCD/Keypad Shields beim betätigen egal welcher taste dazu übergingen sinnloses anzuzeigen oder auf weiße Rechtecke umzuspringen.
    Einige Displays zeigten auch garnichts oder schon ab dem Start nur rechtecke.
    Falls noch jemand verzweifelt den Fehler im code sucht hier eine mögliche Lösung:

    Ich habe festgestellt, dass bei UNO und Mega-Boards mit USB Typ-B Buchse die Kante des Blechgehäuses der Buchse die hervorstehenden Pins des LCDs auf der Unterseite der Platine kurzschließen kann. Bei einigen permanent, bei anderen bleibt ein minimaler Spalt, sodass der Kurzschluss erst beim Betätigen einer Taste entsteht.
    Überkleben mit Isolierband (am Besten mehrlagig) und Abfeilen der spitzen Pins löst das Problem.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert