Pages: [1]   Go Down
Author Topic: LCD Keypad shield Sainsmart  (Read 7362 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: April 01, 2012, 04:24:55 am by Cetax » Logged

*greatz*

 CeTax

www dot blinkmann dot de


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Verwende IDE0023 dann funktionierts.
grüße Uwe
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !!! smiley
« Last Edit: April 01, 2012, 04:23:52 am by Cetax » Logged

*greatz*

 CeTax

www dot blinkmann dot de


Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 148
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, das geht.


Gruß
Juergen
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

* 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
« Last Edit: April 01, 2012, 01:27:43 pm by uwefed » Logged

Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 01, 2012, 04:23:16 am by Cetax » Logged

*greatz*

 CeTax

www dot blinkmann dot de


Germany
Offline Offline
Edison Member
*
Karma: 46
Posts: 2310
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
aha, Ok,klar wer lesen kann ist klar im Vorteil...  smiley-roll
Steht ja in der Überschrift,
Quote
die ich überlesen habe...
Dann werde ich bei den nächsten Fehlern meine Suche mal erweitern.
Vielen Dank für den Tip.
« Last Edit: April 01, 2012, 05:48:57 am by Cetax » Logged

*greatz*

 CeTax

www dot blinkmann dot de


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da macht man alles richtig, zitiert fleißig mit Quellangabe und wird einfach so überlesen; seufz  smiley-wink smiley-wink smiley-wink
Cetax mach Dir mal keine Sorgen darüber.  smiley-cool smiley-cool smiley-draw
Grüße Uwe
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif
in die "LCD4Bit_mod.cpp" eingetragen und folgendes auskommentiert:
Code:
#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
« Last Edit: April 01, 2012, 02:52:10 pm by Cetax » Logged

*greatz*

 CeTax

www dot blinkmann dot de


Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#if ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif
in die "LCD4Bit_mod.cpp" eingetragen und folgendes auskommentiert:
Code:
#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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-grin

Ich hoffe das hilft irgendjemandem smiley-grin

-----
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:
#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
« Last Edit: October 16, 2012, 08:31:31 am by Phaiax » Logged

Pages: [1]   Go Up
Jump to: