Forum: Mikrocontroller und Digitale Elektronik Bounce funktioniert nicht


von André (Gast)


Lesenswert?

Hallo,

kann mir einer sagen warum ich bei diesem Code eine Fehlermeldung 
bekomme?
Ich verwende ARDUINO UNO

Hier der Code:
1
#include <Bounce.h>
2
#define BUTTON 2
3
#define LED 13
4
5
Bounce bouncer = Bounce( BUTTON,5 ); 
6
7
int Vorher = 0;
8
9
void setup() {
10
  pinMode(BUTTON,INPUT);
11
  pinMode(LED,OUTPUT);
12
}
13
14
void loop()
15
{
16
  bouncer.update ( );
17
 if ( bouncer.read()  && (Vorher == 0) )
18
 {
19
    Vorher = 1; 
20
   digitalWrite(LED, HIGH);
21
 }
22
 else
23
 {
24
   Vorher = 0;
25
  digitalWrite(LED, LOW);
26
 }
27
}


Diese Fehlermeldung wird angezeigt:
1
Debounce:10: error: 'Bounce' does not name a type
2
Debounce.ino: In function 'void loop()':
3
Debounce:22: error: 'bouncer' was not declared in this scope

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Welches bounce.h verwendest du?

In dem, das ich auf die schnelle gefunden habe, versteht die Klasse 
Bounce genau diese Dinge (Auszug aus dem bounce.h)
1
class Bounce
2
{
3
4
public:
5
  // Create an instance of the bounce library
6
  Bounce(); 
7
  // Attach to a pin (and also sets initial state)
8
  void attach(int pin);
9
  // Sets the debounce interval
10
  void interval(unsigned long interval_millis); 
11
  // Updates the pin
12
  // Returns 1 if the state changed
13
  // Returns 0 if the state did not change
14
  bool update(); 
15
  // Returns the updated pin state
16
  uint8_t read();
17
...

insbesondere gibt es keinen Konstruktor, der eine Pinnummer oder ein 
2-tes Argument übernehmen würde, so wie du es hier
1
Bounce bouncer = Bounce( BUTTON,5 );
voraussetzt. Mal ganz abgesehen davon, dass das völlig unüblich 
geschrieben ist. Welchen Sinn soll es haben, sich erst mal ein 
temporäres Objekt zu erzeugen, welches dann mittels Copy-Konstruktor 
dazu benutzt wird, das echte Objekt zu initialisieren. Aber ok, named 
return value optimization ist schon erfunden und behandelt diesen Fall.

Normalerweise würde man das eher so schreiben ...
1
Bounce bouncer( BUTTON,5 );

... aber wie schon gesagt, einen derartigen Konstruktor gibt es nicht in 
der Klasse, die auch auf http://playground.arduino.cc/code/bounce 
gefunden habe. Und was es nicht gibt, kannst du auch nicht benutzen. Was 
es hingegen in der Klasse gibt, sind die Funktionen "attach" und 
"intervall".
Aber, das alles unter der Voraussetzung, dass du auch diese Klasse 
benutzt und nicht irgendeine andere, die zufällig gleich heißt.

: Bearbeitet durch User
von André (Gast)


Lesenswert?

Danke für deine Antwort

ich habe diesen Code aus dem Buch Arduino Physical Computing

genau so wie ich den Code geschrieben habe ist das auch im Buch 
geschrieben.

Ich verwende die Software Arduino 1.0.5

von Karl H. (kbuchegg)


Lesenswert?

André schrieb:
> Danke für deine Antwort
>
> ich habe diesen Code aus dem Buch Arduino Physical Computing
>
> genau so wie ich den Code geschrieben habe ist das auch im Buch
> geschrieben.

Das mag schon sein.

> Ich verwende die Software Arduino 1.0.5

Dann öffne deine Version der Datei 'bounce.h' und sieh selber nach, was 
diese Klasse alles kann. Das ist eine reine Textdatei. Man kann, darf 
und im Fehlerfall soll diese Datei ruhig mal aufmachen um sich selbst 
einen Überblick zu verschaffen, was eine Klasse alles kann und welche 
Methoden sie bereit stellt. Der Texteditor beisst nicht, wenn du da 
einfach mal reinschaust.

Das du ein Buch über physical computing hast, entbindet dich nicht 
davon, wenigstens die Grundlagen von C++ zu lernen und zumindest 
rudimentäre Fähigkeiten darin zu entwickeln, wie man mit Fehlermeldungen 
des Compilers umgeht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.