PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu bounce



fredyxx
16.09.2016, 11:50
Hallo,

in diesem kleinen Programm soll die Variable JustPin von Anfang an "1" bleiben. (Bitte nicht nach dem Sinn fragen)



#include <Bounce2.h> // einbinden der Library für die Unterdrückung des Kontaktentprellens
Bounce debouncer = Bounce();


int JustPin_roh = 53;
int JustPin; // diese Variable nimmt das Ergebnis nach der Prellunterdrückung an



void setup() {

Serial.begin (250000);
while (!Serial);

pinMode (JustPin_roh, INPUT);
digitalWrite(JustPin_roh, HIGH); //schaltet den PullUp-Widerstand ein

debouncer.attach(JustPin_roh); // für Prellunterdrückung von Pin 53
debouncer.interval(1); // interval in ms


pinMode (52, OUTPUT);
digitalWrite (52, LOW);
JustPin = HIGH;

}

void loop() {

Serial.print("JustPin = ");
Serial.println(JustPin);
Serial.println("");

debouncer.update(); // aktualisiert den Bouncezustand
JustPin = debouncer.read(); // übergibt den aktualisierten Wert an die Variable JustPin.
if (JustPin == HIGH) {
digitalWrite(52, HIGH);
}

} //************* ENDE loop



Mit "JustPin = debouncer.read();" ist das auch so.

Ergebnis auf dem Monitor:
32045

Mit "JustPin = debouncer.fell();" oder "JustPin = debouncer.rose(); ist das aber nicht der Fall.

Ergebnis auf dem Monitor:
32046

Wie kann das sein? Wie kann ich das verhindern?

vG

fredyxx

witkatz
16.09.2016, 12:36
Mit "JustPin = debouncer.fell();" oder "JustPin = debouncer.rose(); ist das aber nicht der Fall.Das sind wohl Methoden für Flankenerkennung. Zitat aus der bounce2/wiki (https://github.com/thomasfredericks/Bounce2/wiki)

bool read()
Reads the updated pin state.

bool fell()
Returns true if pin signal transitions from high to low.

bool rose()
Returns true if signal transitions from low to high.

Gruß
witkatz

fredyxx
16.09.2016, 12:43
Das sind wohl Methoden für Flankenerkennung. Zitat aus der bounce2/wiki (https://github.com/thomasfredericks/Bounce2/wiki)


Gruß
witkatz

Das ist mir klar, erklärt aber nicht das unterschiedliche Verhalten.

Noch eine Ergänzung:

bei nicht betätigtem Taster ist der Eingang HIGH

vG
fredyxx

witkatz
16.09.2016, 13:16
Doch, ich finde schon, dass das das unterschiedliche Verhalten erklärt:
- read() gibt den entprellten Signalwert, also immer true wenn das signal immer HIGH ist.
- fell() und rose() geben nur einmal true, wenn eine Flanke erkannt wurde, sonst immer false.
Mich wundert nur das eine true am Anfang.

fredyxx
16.09.2016, 13:35
Doch, ich finde schon, dass das das unterschiedliche Verhalten erklärt:
- read() gibt den entprellten Signalwert, also immer true wenn das signal immer HIGH ist.
- fell() und rose() geben nur einmal true, wenn eine Flanke erkannt wurde, sonst immer false.
Mich wundert nur das eine true am Anfang.

Dann ist doch alles klar:


fell() und rose() geben nur einmal true, wenn eine Flanke erkannt wurde, sonst immer false

Das war mir so nicht klar, aber logisch. Wenn es keine "1" zurückgeben kann, bleibt halt nur die "0". Eine Variable in diesem Befehl nicht zu verändern geht wohl nicht. War wohl eine naive Vorstellung!



Mich wundert nur das eine true am Anfang.

Das kommt doch daher, weil der 1. Serial.print vor dem



debouncer.update() ;
JustPin = debouncer.read();


kommt und da ist JustPin aus dem Setup ja noch HIGH.

Danke für die HIlfe!!

vG

fredyxx