Go Down

Topic: LCD Keypad shield Sainsmart (Read 8624 times) previous topic - next topic

Cetax

Mar 31, 2012, 10:29 pm Last Edit: Apr 01, 2012, 11:24 am by Cetax Reason: 1
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.
*greatz*

 CeTax

www dot blinkmann dot de

uwefed

Verwende IDE0023 dann funktionierts.
grüße Uwe

Cetax

#2
Apr 01, 2012, 08:10 am Last Edit: Apr 01, 2012, 11:23 am by Cetax Reason: 1
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 !!! :)
*greatz*

 CeTax

www dot blinkmann dot de

JuergenR


uwefed

#4
Apr 01, 2012, 10:13 am Last Edit: Apr 01, 2012, 08:27 pm by uwefed Reason: 1
Wenn Du die Bibliothek änderst dann funktioniert auch IDE1.0

Quote from: 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

Cetax

#5
Apr 01, 2012, 11:11 am Last Edit: Apr 01, 2012, 11:23 am by Cetax Reason: 1
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.  :smiley-mr-green:
*greatz*

 CeTax

www dot blinkmann dot de

sth77


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.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Cetax

#7
Apr 01, 2012, 12:44 pm Last Edit: Apr 01, 2012, 12:48 pm by Cetax Reason: 1
Hi,
aha, Ok,klar wer lesen kann ist klar im Vorteil...  :smiley-roll:
Steht ja in der Überschrift,
Quote
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.
*greatz*

 CeTax

www dot blinkmann dot de

uwefed

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

Cetax

#9
Apr 01, 2012, 09:11 pm Last Edit: Apr 01, 2012, 09:52 pm by Cetax Reason: 1
Hi,
habe es hin bekommen, aber das war garnicht so einfach...
Ich musste noch was auskommentieren,erst danach hat es geklappt.

Also, ich habe
Code: [Select]
#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

in die "LCD4Bit_mod.cpp" eingetragen und folgendes auskommentiert:
Code: [Select]
#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
*greatz*

 CeTax

www dot blinkmann dot de

onkelhotte

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 ...


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

Also, ich habe
Code: [Select]
#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

in die "LCD4Bit_mod.cpp" eingetragen und folgendes auskommentiert:
Code: [Select]
#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.

Phaiax

#11
Oct 16, 2012, 03:18 pm Last Edit: Oct 16, 2012, 03:31 pm by Phaiax Reason: 1
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):

https://github.com/Phaiax/sainsmartkeypad

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 :D

Ich hoffe das hilft irgendjemandem :D

-----
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:
Code: [Select]
#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

Go Up