Button debounce hardwarematig
33 berichten
• Pagina 4 van 4 • 1, 2, 3, 4
Re: Button debounce hardwarematig
Aangezien ik best wel, zeg maar gerust verslaafd ben aan Arduino heb ik waar ik eerder faalde nog maar eens de Bounce library een kans gegeven.
Volgens mij werkt het nu prima.
Heeft deze library nadelen ten opzichte van jouw code Nico?
Volgens mij werkt het nu prima.
Heeft deze library nadelen ten opzichte van jouw code Nico?
- Code: Alles selecteren
#include <Bounce2.h>
int latchPin = 8;
int klokPin = 12;
int dataPin = 11;
int piezoBuz = 3;
int Ledlinkerspeler = 10;
int Ledrechterspeler = 9;
const int knopPin = 7; // the number of the pushbutton pin
const int knopPin2 = 4; // the number of the pushbutton pin
// variables will change:
int knopstatus = LOW; // variable for reading the pushbutton status
int knopstatus2 = LOW; // variable for reading the pushbutton status
int snelheid = 250; // elke 1/4 seconden LED1 wisselen
unsigned long timer; // nodig om na een bepaalde tijd iets te doen
uint16_t volgendeStap; // geeft aan welke stap verwerkt moet worden
uint16_t teller; // zomaar een tellertje
int first = 0;
int second = 0;
Bounce debounce1 = Bounce();
Bounce debounce2 = Bounce();
void(* resetFunc) (void) = 0;//declare reset function at address 0
void setup() {
// put your setup code here, to run once:
pinMode (dataPin, OUTPUT);
pinMode (klokPin, OUTPUT);
pinMode (latchPin, OUTPUT);
volgendeStap = 0; // we beginnen bij stap 0
teller = 0; // tellertje voor de eerste keer opzetten
timer = millis(); // timertje idem
debounce1.attach(knopPin);
debounce1.interval(20);
debounce2.attach(knopPin2);
debounce2.interval(20);
}
enum {
initieerStap1 ,
stap1 ,
initieerStap2 ,
stap2 ,
initieerStap3 ,
stap3 ,
initieerStap4 ,
stap4 ,
initieerStap5 ,
stap5 ,
initieerStap6 ,
stap6 ,
initieerStap7 ,
stap7 ,
initieerStap8 ,
stap8 ,
initieerStap9 ,
stap9 ,
initieerStap10 ,
stap10 ,
initieerStap11 ,
stap11 ,
initieerStap12 ,
stap12 ,
initieerStap13 ,
stap13 ,
initieerStap14 ,
stap14 ,
initieerStap15 ,
stap15 ,
initieerStap16 ,
stap16 ,
initieerStap17 ,
stap17 ,
initieerStap18 ,
stap18 ,
initieerStap19 ,
stap19 ,
initieerStap20 ,
stap20 ,
initieerStap21 ,
stap21 ,
initieerStap22 ,
stap22 ,
initieerStap23 ,
stap23 ,
initieerStap24 ,
stap24 ,
initieerStap25 ,
stap25 ,
initieerStap26 ,
stap26 ,
initieerStap27 ,
stap27 ,
initieerStap28 ,
stap28 ,
initieerStap29 ,
stap29 ,
initieerStap30 ,
stap30 ,
initieerStap31 ,
stap31 ,
initieerStap32 ,
stap32 ,
initieerStap33 ,
stap33 ,
beginOpnieuw
};
void loop() {
// Update the debouncer
debounce1.update();
debounce2.update();
// Get the update value
int value1 = debounce1.read();
int value2 = debounce2.read();
if (snelheid <10)
{
snelheid = 5;
}
// knopstatus = digitalRead(knopPin);
// knopstatus2 = digitalRead(knopPin2);
// put your main code here, to run repeatedly:
//
// verwerk de relevante stap
//
switch (volgendeStap) {
case initieerStap1:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap1:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00000001);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap2:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap2:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00000010);
// digitalWrite(LED2, !digitalRead(LED2)); // Flip led 2
teller++; // verhoog teller tot 10
if (teller > 1) { // alles gehad
volgendeStap++;
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap3:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap3:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00000100);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap4:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap4:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00001000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap5:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap5:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00010000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap6:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap6:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00100000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap7:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap7:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b01000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap8:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap8:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b10000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap9:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap9:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000001, 0b00000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap10:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap10:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000010, 0b00000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap11:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap11:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000100, 0b00000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap12:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap12:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00001000, 0b00000000);
// digitalWrite(LED2, !digitalRead(LED2)); // Flip led 2
teller++; // verhoog teller tot 10
if (teller > 1) { // alles gehad
volgendeStap++;
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap13:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap13:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00010000, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap14:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap14:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00100000, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap15:
teller = 0; // reset de teller
lightLeds (0b00000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap15:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b01000000, 0b00000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap16:
teller = 0; // reset de teller
lightLeds (0b00000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap16:
//
// alleen uitvoeren als de tijd is verstreken
//
if (value2 == HIGH) {
volgendeStap = volgendeStap +3;
}
if (millis() > timer) {
lightLeds (0b10000000, 0b00000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
snelheid = snelheid*2;
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap17:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap17:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
//lightLeds (0b00000000, 0b00000000);
analogWrite(Ledrechterspeler, 255); // rechterspeler is af, led rechterspeler aanzetten voor 3 sec
tone(piezoBuz, 250, 100); // korte afkeurende toon
delay(3000);
analogWrite(Ledrechterspeler, 0); // led rechterspeler uit
resetFunc(); // start de Arduino en dus het spel opnieuw op
}
break;
case initieerStap18:
teller = 0; // reset de teller
lightLeds (0b00000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap18:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b01000000, 0b00000000);
// digitalWrite(LED1, !digitalRead(LED1)); // Flip led 1
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
snelheid = snelheid /2;
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap19:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap19:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00100000, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap20:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap20:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00010000, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap21:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap21:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00001000, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap22:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap22:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000100, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap23:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap23:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000010, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap24:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap24:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000001, 0b00000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap25:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap25:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b10000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap26:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap26:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b01000000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap27:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap27:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00100000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap28:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap28:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00010000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap29:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap29:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00001000);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap30:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap30:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00000100);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap31:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap31:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
lightLeds (0b00000000, 0b00000010);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap32:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap32:
//
// alleen uitvoeren als de tijd is verstreken
//
if (value1 == HIGH) {
snelheid = snelheid /4;
volgendeStap = initieerStap2;
}
if (millis() > timer) {
lightLeds (0b00000000, 0b00000001);
teller++; // verhoog teller
if (teller > 1) { // alles gehad?
volgendeStap++; // we zijn hier klaar
}
else {
snelheid = snelheid *2;
timer = millis() + snelheid; // we zijn er nog niet dus de timer zetten
}
}
break;
case initieerStap33:
teller = 0; // reset de teller
lightLeds (0b0000000, 0b00000000); // zet de LED uit
volgendeStap++;
break;
case stap33:
//
// alleen uitvoeren als de tijd is verstreken
//
if (millis() > timer) {
//lightLeds (0b00000000, 0b00000000);
analogWrite(Ledlinkerspeler, 255); //linkerspeler is af, led voor de linkerspeler aanzetten voor 3 sec
tone(piezoBuz, 250, 100); // korte afkeurende toon
delay(3000);
analogWrite(Ledlinkerspeler, 0); // led linkerspeler uit
resetFunc(); // start de Arduino en dus het spel opnieuw op
}
break;
case beginOpnieuw:
volgendeStap = 0; // begin bij de eerste stap
break;
default:
break;
}
}
void lightLeds (int second, int first) {
digitalWrite (latchPin, LOW);
shiftOut (dataPin, klokPin, LSBFIRST, first);
shiftOut (dataPin, klokPin, LSBFIRST, second);
digitalWrite (latchPin, HIGH);
//delay (snelheid);
}
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Button debounce hardwarematig
Geen idee. Moet je zelf maar beoordelen...... Ik heb gewoon een functie die prima werkt. Er is een prima library waar meer functionaliteit in zit (OneButton). Dus waarom zou ik verder kijken?
Re: Button debounce hardwarematig
ja das waar. Die one button heeft idd debounce en verschillende functies.
33 berichten
• Pagina 4 van 4 • 1, 2, 3, 4
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 55 gasten