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.
PS: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; }
Was haltet ihr von dem code?
Wie kann ich das ganze jetzt in eine Bib. packen?
Vermutlich kann nur Entpreller() ausgelagert werden - oder?







Zitieren


Lesezeichen