Hallo,
mein unten angehängter Sketch nutzt die Bounce2-Bibliothek (Download).
Für den Fall das jmd. diesen Versuch nachbauen möchte, habe ich ein Foto angehängt.
Dieser Versuch soll es ermöglichen von jeder erdenklichen Stelle im Sketch aus so einfach wie möglich das drücken einer Taste erfassen zu können. Desweiteren soll das Auslösen unterbunden werden, wenn bereits eine Taste gedrückt gehalten wird. Später sollen noch Abfragen wie z.B. das gedrückt halten von mehreren Tasten über eine gewisse Zeitspanne dazukommen.
In diesem Fall wird jedoch lediglich von der Funktion void einbindung() auf die Zustände der beiden Tasten zugegriffen.
Ich habe nun zwei Fragen:
- Wie kann ich umgehen, dass t1 bis t5 globale Variablen sein müssen?
- Wie kann ich umgehen, dass ich mit fortschreitender Tastenanzahl verrückt werde?
Gruß Chris
#include <Bounce2.h>
#define BUTTON_1 2
#define BUTTON_2 3
Bounce debouncer_1 = Bounce();
Bounce debouncer_2 = Bounce();
boolean t1; // Taste 1 wurde gedrückt
boolean t2; // Taste 2 wurde gedrückt
boolean t3; // Taste 3 wurde gedrückt
boolean t4; // Taste 4 wurde gedrückt
boolean t5; // Taste 5 wurde gedrückt
void setup()
{
pinMode(BUTTON_1,INPUT_PULLUP);
pinMode(BUTTON_2,INPUT_PULLUP);
debouncer_1.attach(BUTTON_1);
debouncer_2.attach(BUTTON_2);
debouncer_1.interval(10);
debouncer_2.interval(10);
Serial.begin(9600);
}
void loop()
{
buttonCheck();
einbindung();
}
void buttonCheck()
{
t1 = 0; // Taste 1 wurde gedrückt
t2 = 0; // Taste 2 wurde gedrückt
t3 = 0; // Taste 3 wurde gedrückt
t4 = 0; // Taste 4 wurde gedrückt
t5 = 0; // Taste 5 wurde gedrückt
static unsigned long tTime1; // Hält den Zeitpunkt fest, wann zum ersten Mal ein einzelner Button gedrückt gehalten wird
static unsigned long tTime2; // Hält den Zeitpunkt fest, wann zum ersten Mal zwei Buttons gedrückt gehalten werden
static unsigned long tTime3;
static unsigned long tTime4;
static unsigned long tTime5;
debouncer_1.update();
debouncer_2.update();
if(!debouncer_1.read() + !debouncer_2.read() == 1) // Wenn nur eine Taste gedrückt gehalten wird
{
if(debouncer_1.fell())
{
Serial.println("Taste 1 wurde einmalig gedrueckt");
Serial.println("tTime1 = millis()");
tTime1 = millis();
t1 = 1;
}
if(debouncer_2.fell())
{
Serial.println("Taste 2 wurde einmalig gedrueckt");
Serial.println("tTime1 = millis()");
tTime1 = millis();
t2 = 1;
}
}
else if(!debouncer_1.read() + !debouncer_2.read() == 2) // Wenn zwei Tasten gedrückt gehalten werden
{
if(debouncer_1.fell())
{
Serial.println("Taste 1 wurde einmalig gedrueckt, waehrend Taste 2 gedrueckt gehalten wird");
Serial.println("tTime2 = millis()");
tTime2 = millis();
}
if(debouncer_2.fell())
{
Serial.println("Taste 2 wurde einmalig gedrueckt, waehrend Taste 1 gedrueckt gehalten wird");
Serial.println("tTime2 = millis()");
tTime2 = millis();
}
}
}
void einbindung()
{
if(t1) Serial.println("Taste 1 hat etwas ausgeloest");
if(t2) Serial.println("Taste 1 hat etwas ausgeloest");
}
