Bounce Library funktioniert nicht.

Guten Abend,

habe ein kleines Problem... Und zwar wollte ich heute mal die Bounce Library ausprobieren. Habe sie mir hier runtergeladen:

http://playground.arduino.cc/Code/Bounce

jedoch wird beim hinzufügen der Name Bounce nicht gelb angezeigt und wenn ich den Skatch kompiliere kommt diese Fehlermeldung:

Bouncer:5: error: 'Bounce' does not name a type
Bouncer.ino: In function 'void loop()':
Bouncer:14: error: 'bouncer' was not declared in this scope

Ich habe den Library Ordner unter C:\Users____\Documents\Arduino\libraries abgelegt.

Ich hoffe ihr habt eine Lösung zu diesem Problem.

Mfg maddig

Das mit dem User Verzeichnis sieht etwas komisch aus. Ist das wirklich dein Arduino Installations Verzeichnis und nicht etwa dein Sketch Verzeichnis? Ich habe es nach C:\Programme\Arduino (aka Program Files) installiert.

Hallo,

wenn es im richtigen Verzeichnis liegt, müßtest Du in der IDE unter Datei > Beispiele > Bounce ein Example öffnen können. Wenn nicht, liegt es wirklich am falschen Ort.

Ich hab es gerade mal durch menubar -> Sketch -> Library importieren und Add Library probiert genau das selbe und wenn ich es in C:\Program Files (x86)\Arduino\libraries ablege auch genau das selbe Ergebnis...

Hallo,

hast Du die IDE auch geschlossen und wieder neu gestartet? Erst beim erneuten starten der IDE wird geguckt was alles an Librarys so vorhanden ist. Deine Ordnerstruktur in \libraries stimmt auch? Nicht das bei der Bounce ein Unterverzeichnis zu viel ist.

Ja habe sogar den PC neugestartet. Im Ordner Bounce befindet sich nur

examples
Bounce2.cpp
Bounce2.h
LICENSE
REAMDE.md

Hallo,

Du mußt da selbst reingemoscht haben. Sonst wäre das nicht passiert. Du hast demnach die Bounce2 Library und nicht die Bounce Library. Dein Ordner unter libraries muß demnach auch Bounce2 heißen und nicht nur Bounce. Und im Sketch muß dann #include <Bounce2.h> stehen. Danach sollte das in der IDE funktionieren.

Eig passt es, ich hab gerade sogar nochmal das ganze Arduino Programm neu installiert und alle Daten wo dazu gehören gelöscht, immer noch das selbe Ergebnis :frowning:

Gibs vll irgendwo nen Link zu einer älteren Version oder ner anderen Version von dieser Library?

Hallo,

ich nehme nachwievor an die Ordnerstruktur stimmt noch nicht. Kannst Du alle anderen Librarys in der IDE einbinden? Im Ordner libraries müssen noch standardmäßige vorhanden sein die mit installiert wurden.

Bounce2 gibts hier: GitHub - thomasfredericks/Bounce2: Debouncing library for Arduino and Wiring

Beim entpacken muß man etwas aufpassen.

in \libraries muß dass dann so aussehen

\libraries\Bounce2\
                    \examples
                    \Bounce2.cpp
                    \Bounce2.h
                    \ ...

Genauso hab ich es gemacht und hab es nochmal neu heruntergeladen.

Wenn ich dann die Library einbinden will:

#include <Bounce2.h>

bleibt Bounce2 einfach grau bzw. schwarz und der Sketch funktioniert einfach nicht…

Es versteh es nicht…

Hallo,

die include Zeile bleibt schwarz weil Bounce2 nicht als Keyword irgendwo definiert ist. Ist nur ein optischer Schönheitsfehler der nichts an der Funktion ändert.

Was passiert denn wenn Du in der IDE > Datei > Beispiele > Bounce2 > bounce auswählst?
Kannst Du den Sketch öffnen und dann auch fehlerfrei kompilieren so wie er ist?
Hast Du unter Tools > Board > Deinen Arduino ausgewählt?
Mehr fällt mir nicht mehr ein.

Moment. Was haste denn überhaupt für ein Arduinoboard? Und welche IDE Version? Wenn Uno oder Mega2560 dann haste hoffentlich die IDE 1.0.5r2

:open_mouth: Es funktioniert !!! Danke!

Mit dem Beispiel funktioniert alles, wenn ich jedoch den Sketch öffne den ich selber geschrieben hab kommst diese Fehlermeldung:

Bouncer:5: error: no matching function for call to 'Bounce::Bounce(int&, int)'
C:\Program Files (x86)\Arduino\libraries\Bounce2/Bounce2.h:40: note: candidates are: Bounce::Bounce()
C:\Program Files (x86)\Arduino\libraries\Bounce2/Bounce2.h:36: note:                 Bounce::Bounce(const Bounce&)

Sketch:

#include <Bounce2.h>

int counter = 0;
int button = 8;
Bounce bouncer = Bounce(button,5);

void setup(){
  
  Serial.begin(9600);
}

void loop(){
 
  if(bouncer.update()){
    if(bouncer.read()==HIGH)
    {
      counter++;
    }
  }
  
counter = counter % 256;
Serial.println(counter);
}

Es gibt sogar nur den Standard Konstruktor Bounce(). Etwas komisch, aber das könnte man auch selbst erweitern. Der Konstruktor ist schnell geschrieben.

Mach es so:

Bounce bouncer;

void setup()
{
     bouncer.attach(button);
     bouncer.interval(5);
}

So ist es doch auch hier gemacht:
https://github.com/thomasfredericks/Bounce-Arduino-Wiring/blob/master/Bounce2/examples/bounce/bounce.ino

Wobei der Standard Konstruktor so aussieht:

Bounce::Bounce()
: previous_millis(0)
, interval_millis(10)
, state(0)
, pin(0)
{}

Es wird als standardmäßig ein Intervall von 10ms verwendet. Man könnte sich das interval(5) also sparen und nur mit attach() den Pin angeben.

Aah Danke funktioniert jetzt alles.

Jetzt hab ich aber noch eine kleine Fragen.

Hier ist mein loop teil:

void loop() {
  if(bouncer.update()) {
   if(bouncer.read()==HIGH) {
     counter=counter+1;
   }
 }
counter = counter % 6;
Serial.println(counter);
 
if(counter == 0)
{
  lcd.clear()
  lcd.setCursor(0, 0);                // (0, 0)  Erste Zahl die Position in der Zeile, die zweite die Zeile selbst
  lcd.print("Menu 1 Start");
}

if(counter == 1)
{
  lcd.clear()
  lcd.setCursor(0, 0);
  lcd.print("Menu 2 Auswahl");
}
}

Wenn ich das lcd.clear() nicht mache bleibt auf dem Display im Menu nummer 2 immer noch Starthl stehn. Das HL am Ende kommt von dem Wort Auswahl vorher. Um das wegzumachen habe ich lcd.clear() am Anfang eingefügt. Jedoch flackert und zeigt nur vorne volle helle Pixel an der Rest ist nur schwach zu lesen. Wenn ich lcd.clear auskommentier dann funktioniert es einwandfrei. Wisst ihr woran das liegen kann?

clear() ist sehr langsam. Das dauert mehrere ms. Darauf sollte man verzichten. Besser ist es nur den Teil wo wirklich was steht mit Leerzeichen zu überschreiben.

Noch besser ist es den neuen Text direkt über den alten zu schreiben und nur die Differenz von altem und neuem Text mit Leerzeichen zu überschreiben.

Und das hier willst du glaube ich nur machen wenn der Taster gedrückt wurde:

counter = counter % 6;
Serial.println(counter);

Nicht ständig.