User manual

51 52
7. Tasten & Prellen
7.1 Tasten können prellen
Wenn man einen mechanischen Taster betätigt, so kann es zu sogenanntem Kontaktprellen kommen. Beim
Drücken federn die Kontakte etwas, so dass die Taste mehrfach auslöst, also den Kontakt schliesst, dann erneut
öffnet und wieder schließt...
+
-
9V
1A
C 7-Segment-LED
SCL
SDA
SCL
SDA
+9V
Adr:40,44,48,4C
PCF8574 T
+9V
SCLS DA
+9V
A0
A1
Tx
Rx
PD2
SCLKMOSI
PD3
PD 6
PD 4
PD 5
PD 7
A7
A3
A2
A6
NANO
to
Br ick`R`
3,3V 5V
USB
B0
SS
MISC
B1
C
// DE_17 Tasten koennen Prellen
#include <Wire.h>
// 8574T
#dene i2cseg7x2alsb1 (0x40>>1)
#dene i2cseg7x2amsb1 (0x42>>1)
..... wie vorher ...
// Code neu:
#dene PORTTASTE 2 // hier an PD2 die Taste anschliessen
// I2C initialisieren und Taste denieren
void setup() {
Wire.begin(); // I2C
pinMode(PORTTASTE,INPUT_PULLUP); // Taste mit Pullup
}
void loop() { // Schleife beginnt hier
char buffer[10]; // Dort komtm Zaehlerstand in ASCII
static int counter = 0; // Der Testcounter
sprintf(buffer,“%02d“,counter); // Umwandlen in ASCII
// Taste abfragen, kann prellen
if (digitalRead(PORTTASTE)==LOW) { // wenn auf 0 geht
while (digitalRead(PORTTASTE)==LOW) { // Solange gedrueckt
// warten bis losgelassen !
} // Sonst gehts gar nicht
counter++; // dann erst zaehlen - aber auch Prellen wird gezaehlt
}
if (counter > 99) counter = 0; // wie vorher 0..9 zaehlern dann von vorne
// Counter ausgeben
display_seg1x(i2cseg7x2amsb1,buffer[0]); // msb zeichen
display_seg1x(i2cseg7x2alsb1,buffer[1]); // lsb zeichen
} // Ende der Schleife
drücken
geschlossen
In dem Programm kann man das explizit testen. Drückt man die Taste, wird manchmal mehr als nur einmal
gezählt. Manche Tasten sind allerdings auch so schnell, dass der Prozessor das nicht mitbekommt. Man muss mit
der Schaltung unten ggf. etwas experimentieren, oder den Schluss nach Masse mit einem Draht statt der Taste
durchführen, um den Effekt zu sehen. Die Zeitdauer des Prellens liegt in etwa im Millisekundenbereich.
Was passiert? Wenn man die Taste drückt wird der Zähler-
stand erhöht. Hier kann es aber passieren, dass mehr als
einmal gezählt wird also z.B. 00,03,04,07,09 ... usw.
Das hängt hauptsächlich von der Qualität des Tasters ab.
Man kann bei dem Versuch auch die Taste mit einem Stück
Draht kurzzeitig überbrücken, um den Effekt deutlicher zu
sehen.