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("        ");
  }
}

 

 

9 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

Hinterlasse eine Antwort

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