User manual

21 22
Das Zählen geschieht im Sekundentakt. Man kann nun eine primitive Stoppuhr bauen, indem man einen Taster
zur Freigabe des Zählvorgangs verwendet.
Unten noch eine kleine Tabelle, die beim Umrechnen hilft. Wir werden später noch eine komfortablere Stopp-
uhr mit dezimaler Ausgabe bauen.
Die Taste ist diesmal mit Port 6 und 7 verbunden, wir verwenden hier Port 7, der „Kurzschluss“ zu Port 6 stört
nicht weiter, da er auch als Eingang geschaltet ist (ohne Pullup).
Der Counter zählt nun solange, wie die Taste gedrückt gehalten wird.
+
-
9V
1A
Downsi de
UP
LED
LED
LED
LED
Tabelle Umrechnung Anzeige nach Dezimal:
binär dezimal binär dezimal
0000 0 1000 8
0001 1 1001 9
0010 2 1010 10
0011 3 1011 11
0100 4 1100 12
0101 5 1101 13
0110 6 1110 14
0111 7 1111 15
4.5 Binäres Zählen - durch Taste gesteuert
// DE_5 Binaeres Zaehlen wird durch Taste gesteuert
#dene PORTLED2 2 // LEDs an PD2..PD5
#dene PORTLED3 3 // damit Zuordnung
#dene PORTLED4 4 // denieren
#dene PORTLED5 5
#dene SWITCH7 7 // Die Taste diesmal an Port PD7
void setup() { // alle Ein- und Ausgaenge hier denieren
pinMode(PORTLED2,OUTPUT); // Port 2 als Ausgang schalten
pinMode(PORTLED3,OUTPUT); // Port 3 als Ausgang schalten
pinMode(PORTLED4,OUTPUT); // Port 4 als Ausgang schalten
pinMode(PORTLED5,OUTPUT); // Port 5 als Ausgang schalten
pinMode(SWITCH7,INPUT_PULLUP); // Port 7 als Eingang mit Pullup
// Ein Pullup ist eine Art interner Widerstand. Wenn man die Taste nicht drueckt
// ist der Eingang normalerweise offen und nicht deniert. Durch den Pullup
// liefert ist er High und liefert ein 1-Signal
}
void loop() {
static int counter = 0; // wichtig wieder Denition als Static
if (counter & 1) { // Bit 0 pruefen 0..3 nacheinander
digitalWrite(PORTLED4,HIGH); // rechte LED
} else digitalWrite(PORTLED4,LOW); //
if (counter & 2) { // Bit 1 pruefen
digitalWrite(PORTLED5,HIGH); // linke LED
} else digitalWrite(PORTLED5,LOW); //
if (counter & 4) { // Bit 2 pruefen
digitalWrite(PORTLED3,HIGH); //
} else digitalWrite(PORTLED3,LOW); //
if (counter & 8) { // Bit 3 pruefen
digitalWrite(PORTLED2,HIGH); //
} else digitalWrite(PORTLED2,LOW); //
// Nun die SToppzeit denieren
delay(1000); // Eine weitere Sekunde warten =1000ms
// *** Tastenabfrage hier:
if (digitalRead(SWITCH7) == LOW) { // zaehlen solange gedrueckt
counter = (counter + 1) & 0xf; // 0..15 Zaehler im Kreis
} // nur wenn gedrueckt sonst nicht zaehlen
} // Schleifenende
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
Was passiert? Wenn man die Taste gedrückt hält, dann und nur dann zählen die vier LEDs im Sekun-
dentakt binär von 0000 (alle aus), dann 0001, 0010, 0011 bis 1111 (alle an). Bei losgelassener Taste
bleibt der letzte Anzeigezustand erhalten.