Passt!
Beliebig viele Tasten/Kontakte verwendbar, nacheiender oder ~gleichzeitig~.
Pro Taste/Kontakt wird ledigtlich der "Zwischenspeicher" TasteMi, TasteLi kopiert und umbennat.
Entpreller() setzt die Entprellzeit (Bsp.5ms) aus Sicherheitsgründen hinter die letzte Zustandsänderung.
HTML-Code:
void loop() {
switch(TasteLi(TasteLiPin)) {
case 0: Ausgang(LEDrtPin, 0); TZ("T/LINKS auf -0- entprellt!"); break;
case 1: Ausgang(LEDrtPin, 1); TZ("T/LINKS auf -1- entprellt!"); break;
case 2: TZ("Meldung: T/LINKS IN Entprellung"); break;
}
switch (TasteMi(TasteMiPin)) {
case 0: Ausgang(LEDgePin, 0); TZ("T/MITTE auf -0- entprellt!"); break;
case 1: Ausgang(LEDgePin, 1); TZ("T/MITTE auf -1- entprellt!"); break;
case 2: TZ("Meldung: T/MITTE IN Entprellung"); break;
}
}
//Kontakt Zustandsänderung, nur FunktionsName ändern, Rest ist Universell
int TasteLi(int KontPin) { //Prüfung; gibt 4 Zustand zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...IN Entprellung, 3...keine Zustandsänderung
static unsigned long StartZeit = 0;
static int KontZustAlt = digitalRead(KontPin);
static int EntprellStatus = digitalRead(KontPin);
return Entpreller(KontPin, StartZeit, KontZustAlt, EntprellStatus);
}
//Kontakt Zustandsänderung, nur FunktionsName ändern, Rest ist Universell
int TasteMi(int KontPin) { //Prüfung; gibt 4 Zustand zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...IN Entprellung, 3...keine Zustandsänderung
static unsigned long StartZeit = 0;
static int KontZustAlt = digitalRead(KontPin);
static int EntprellStatus = digitalRead(KontPin);
return Entpreller(KontPin, StartZeit, KontZustAlt, EntprellStatus);
}
//Kontakt-Entprellung; gibt 4 Zustände zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...derzeit in Entprellung, 3...keine Zustandsänderung
int Entpreller(int KontPin, unsigned long &StartZeit, int &KontZustAlt, int &EntprellStatus) {
int KontZustNeu = 0;
if((KontZustNeu = digitalRead(KontPin)) == EntprellStatus) {
return 3;
}
if(KontZustNeu != KontZustAlt) {
StartZeit = millis();
KontZustAlt = KontZustNeu;
}
if(KontZustAlt == 0 && (millis() >= StartZeit + EntprellZeit))
EntprellStatus = 0;
else if(KontZustAlt == 1 && (millis() >= StartZeit + EntprellZeit))
EntprellStatus = 1;
else
EntprellStatus = 2;
return EntprellStatus;
}
PS:
Was haltet ihr von dem code?
Wie kann ich das ganze jetzt in eine Bib. packen?
Vermutlich kann nur Entpreller() ausgelagert werden - oder?
Lesezeichen