LCD Keypad shield Sainsmart

Hallo allerseits,
ich als Anfänger verstehe nicht wieso die Librarie #include <LCD4Bit_mod.h> nicht erkannt wird.
In dem libraries Ordner ist die Datei aber drin:
Ordner heißt:
LCD4Bit_mod
+Keywords.txt
+LCD4Bit_mod.cpp
+LCD4Bit_mod.h
+readme.txt
*examples

Und wenn ich den Sketch …/exapmles/LCD4Bit_modExample.pde aufrufe steht in der ersten Zeile
#include <LCD4Bit_mod.h>

Das steht in schwarz dort, aber mir ist aufgefallen, das wenn ich z.b.
#include <Wire.h>
einfüge, ist das Wort “Wire” in Orange.

Hier die Hardware:
Arduino Uno R3, LCD Keypad Shield von SainsSmart.
Mit dem Sketch LCD 1602, den es hier http://www.sainsmart.com/home-page-view/sainsmart-1602-lcd-keypad-shield-for-arduino-duemilanove-uno-mega2560-mega1280.html gibt, funktioniert das LCD, ein “Hello World” ist sichtbar.
Aber das wird auch mit dem #include <LiquidCrystal.h> gemacht.
Ich benötige aber die LCD4Bit_mod.h

Weiß jemand, wie ich die zum laufen bekomme? Bzw. kann mir sagen wo der Fehler liegt?

Vielen Dank für Eure HIlfe.

Verwende IDE0023 dann funktionierts. grüße Uwe

Guten morgen,
kann die beide einfach nebeneinander installieren (1.0 und 0023)?
Und dann hin und her switchen ?

Mal wieder Danke für schnelle Hilfe !!! :slight_smile:

Ja, das geht.

Gruß Juergen

Wenn Du die Bibliothek änderst dann funktioniert auch IDE1.0

http://arduino.cc/en/Main/ReleaseNotes: * The WProgram.h file, which provides declarations for the Arduino API, has been renamed to Arduino.h. To create a library that will work in both Arduino 0022 and Arduino 1.0, you can use an #ifdef that checks for the ARDUINO constant, which was 22 and is now 100. For example:

if defined(ARDUINO) && ARDUINO >= 100

include "Arduino.h"

else

include "WProgram.h"

endif

Also Du mußt in der Bibiothek statt

include "WProgram.h"

entweder den gesamten obengeschriebene Code einfügen; dann funktioniert die Bibiothek für alle Versionen der IDE oder nur

include "Arduino.h"

dann funktoniert die Bibiothek aber nur für IDE1.0

Ja, Du kannst mehrere Versionen des IDE paralell installieren. Jede Version hat aber "seine" Bibiotheken und wenn Du einenBibiothek dazugibst mußt Du es in allen IDEs machen.

Grüße Uwe

Hallo Uwe, man das ist ja echt super! Danke für die tolle beschreibung. Aber woher weiss man das? Ich bin ja nun was das Internt und google angeht,nicht unwissend, aber das mit dem Umschreiben habe ich nirgends gefunden. Aber egal, Dank dir weiß ichs jetzt und werde meinen Sonntag nachmittag mal damit verbringen, deine Beschreibung umzusetzten. Danke und einen schönen Sonntag. :grin:

Cetax: Aber woher weiss man das? Ich bin ja nun was das Internt und google angeht,nicht unwissend, aber das mit dem Umschreiben habe ich nirgends gefunden.

Das hat Uwe aus den Release Notes der IDE 1.0 zitiert, wie man am Quote sehen kann. Haben wir hier im Forum aber schön oft behandelt, von daher wissen wir auch, wo wir nach der Lösung suchen müssen.

Hi, aha, Ok,klar wer lesen kann ist klar im Vorteil... :roll_eyes: Steht ja in der Überschrift,

Quote from: http://arduino.cc/en/Main/ReleaseNotes

die ich überlesen habe... Dann werde ich bei den nächsten Fehlern meine Suche mal erweitern. Vielen Dank für den Tip.

Da macht man alles richtig, zitiert fleißig mit Quellangabe und wird einfach so überlesen; seufz ;) ;) ;) Cetax mach Dir mal keine Sorgen darüber. 8) 8) :% Grüße Uwe

Hi,
habe es hin bekommen, aber das war garnicht so einfach…
Ich musste noch was auskommentieren,erst danach hat es geklappt.

Also, ich habe

#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

in die “LCD4Bit_mod.cpp” eingetragen und folgendes auskommentiert:

#include "LCD4Bit_mod.h"
extern "C" {
  #include <stdio.h>  //not needed yet
  #include <string.h> //needed for strlen()
  #include <inttypes.h>
//  #include "WConstants.h"  //all things wiring / arduino
}

Ich musste “WConstants.h” raus nehmen, seit dem gibt es keine Fehlermeldungen mehr beim Kopilieren,
warum auch immer…
Die musste ich aber auch schon mal bei einem anderen Sketch raus nehmen.

Danke für Eure Hilfe

Hi, bin genauso brandneu habe identische Hardware und wusele mich hier so durch…
C kann ich auch nicht, nur Pascal und Fortran, aber das ist >15 Jahre her…

Hmm … habe das gleiche Problem, weiß allerdings nicht mal, in welches file ich das von uwefed gesagte hineinkopieren muß.
in die .cpp odr in die .h ??

Ich hab es jetzt genauso gemacht wie Du, aber keine Ahnung, was ich damit angestellt habe…
Da ich nicht weiß, was die WConstants.h denn macht 8oder eben nicht), jetzt, wo sie auskommentiert ist …

Cetax:
Hi,
habe es hin bekommen, aber das war garnicht so einfach…
Ich musste noch was auskommentieren,erst danach hat es geklappt.

Also, ich habe

#if ARDUINO >= 100

#include “Arduino.h”
#else
  #include “WProgram.h”
#endif



in die "LCD4Bit_mod.cpp" eingetragen und folgendes auskommentiert:


#include “LCD4Bit_mod.h”

extern “C” {
  #include <stdio.h>  //not needed yet
  #include <string.h> //needed for strlen()
  #include <inttypes.h>
//  #include “WConstants.h”  //all things wiring / arduino
}



Ich musste "WConstants.h" raus nehmen, seit dem gibt es keine Fehlermeldungen mehr beim Kopilieren,
warum auch immer...
Die musste ich aber auch schon mal bei einem anderen Sketch raus nehmen.

Ja, genau das erschien bei mir auch immer.
Nur das Wconsts.h Wozu ist das gut?

Ich hätte natürlich gerne die elegante Lösung, die sowohl alte Sketches die unter 23 und kleiner entwickelt wurden (wer weiß, wozu es gut ist), als auch die neuen ohne ständig andere Umgebungen laden zu müssen…
Also in welches File exakt muß das oben erwähnte reinkopiert werden …
(I guess, LCD4Bit_mod.cpp)

Evtl. hat jemand ja nochmal die “Gnade”, ein oder zwei Worte hierzu zuschreiben …
Danke,
OH.

Hey.

Der Thread ist zwar schon ein paar Tage alt, aber da er ziemlich weit oben bei Google kommt, wenn man nach der Sainsmart Keypad library sucht, will ich hier kurz n Tip geben.

Die Sainsmart lib auf der offiziellen Sainsmart-Seite ist famos schlecht. Aus irgendeinem Grund wird da zB der Wert von analogRead() auf Änderungen überwacht. Wenn man sich analogRead(keypad_pin) mal über einen längeren Zeitraum ausgeben lässt, kommen beim Gedrückthalten der Nach-Links-Taste solche Wertefolgen heraus: 505, 505 ,505, 506, 506, 505, 506, 505, 505, 505, 505. Die Änderungen unterliegen quasi natürlichem Rauschen. Bei solch einem durch Rauschen verursachten Wertewechsel wird dann erneut die Taste zurückgegeben. Das ist prinzipiell einfach falsch konzipiert, oder nach dem Try/Error prinzip Passt-Schon-Irgendwie programmiert. Auch der komplette Teil mit der _refreshRate ist daneben gegangen, da die Zeite _oldTime = millis(); einfach nie erreicht werden kann. Somit haben sie wenigstens verhindert, dass der dritte große Fehlern, nämlich ein fehlendes Return am Ende keine Auswirkungen hat.

Falls jemand eine Bibliothek für das Keypad (oder allgemein für Widerstandbasierte-Keypads) sucht, gibts seit ein paar Tagen diese hier (unter der GPL lizensiert):

Wer direkt ein Beispiel haben will: http://invisibletower.de/2012/sainsmart-lcd-keypad-library/ ganz unten.
Es wäre cool wenn ihr mir beim Benutzen einen kleinen Kommentar hinterlassen könntet :smiley:

Ich hoffe das hilft irgendjemandem :smiley:


Um auch noch deine Frage zu beantworten:

Es muss eigentlich überall hinein, wo vorher #include “Arduino.h” (bei Arduino1.0 Sketches) oder #include “WProgram.h” (bei Arduino023 Sketches) stand. Das heißt eigentlich in allen Headerdateien. Es gibt aber auch die Möglichkeit, sich zusätzlich eine quasi globale Headerdatei anzulegen. Die nennt man dann meistens ‘sketchhname.h’. Dahinein kommt dann der von dir gepostete Code. In jeder anderen Headerdatei kannst du das #include “Arduino.h” bzw #include “WProgram.h” entfernen und duch ein #include “sketchname.h” ersetzen.

Vergesse aber nicht, alles was dann in der Datei sketchname.h steht mit folgendem Code einzurahmen:

#ifndef sketchname_h
#define sketchname_h

// Hier steht dann der Rest vom Code, also auch das #if ARDUINO < .......

#endif

WConstants.h ist eine Datei, die du selbst in deinem Sketch anlegen musst. (Erkennst du daran, dass statt <> die “”-Zeichen benutzt wurden.

Gruß Phaiax

Hallo zusammen

Ich verwende Arduino erst seit kurzem, jetzt würde ich gerne mit einem Keypad schaffen aber Keypad.h wird nicht erkannt. Was kann ich machen damit es auch Orange wird?

Ich hoffe Ihr könnt mir helfen freundliche Grüße Loris

Orange werden muss da nix. Bei mir werden die meisten Bibliotheken nicht orange und laufen trotzdem. Einfach richtig einfügen, und das geht. Wie man das macht, steht in dutzenden Anleitungen.

loris1814: Hallo zusammen

Ich verwende Arduino erst seit kurzem, jetzt würde ich gerne mit einem Keypad schaffen aber Keypad.h wird nicht erkannt. Was kann ich machen damit es auch Orange wird?

Ich hoffe Ihr könnt mir helfen freundliche Grüße Loris

Totengräber! Hast Du mal aufs Datum geschaut und dabei gesehen, dass Du auf einen Thread von 2012 geantwortet hast?

Und ist Dir vielleicht sogar aufgefallen, dass Dein Problem mit dem Thema des Threads überhaupt rein gar nichts zu tun hat?

Sowas nennt man Themen-Entführung und Themen-Entführung ist ein schlechter Stil und schlechtes Verhalten im Forum, auch wenn es um einen neueren Thread gehen sollte.

Bleibe in einem Thread beim Thema! Oder wenn Du ein ganz anderes Problem hast, mache selbst ein neues Thema auf!