User manual

57 58
7.4 Siebensegment-Anzeige - mit erweitertem up und down Zähler
Mit diesem Zähler kann man auf- und abzählen. Dazu werden zwei Taster verwendet, die im Prozessor abge-
fragt werden. Im Prinzip die gleichen Routinen wie vorher nur mit einem weiteren Zweig für das Runterzählen.
Dabei wird bei einem Zählerstand < 0 wieder mit 9999 begonnen. Also nur der Bereich 00000 bis 9999 ange-
zeigt.
+
-
9V
1A
C 7-Segment-LED
SCL
SDA
SCL
SDA
+9V
Adr:40,44,48,4C
PCF8574 T
+9V
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_20 7segment Zaehler Up und Down.
#include <Wire.h>
// 8574T
#dene i2cseg7x2alsb1 (0x40>>1)
#dene i2cseg7x2amsb1 (0x42>>1)
..... wie vorher ...
//
// Code neu:
#dene PORTTASTEUP 2 // PD2 fuers hochzaehlen
#dene PORTTASTEDOWN 3 // PD3 fuers runterzaehlen
void setup() {
Wire.begin(); // I2C wird initialisiert
pinMode(PORTTASTEUP,INPUT_PULLUP); // beide Tasten mit
pinMode(PORTTASTEDOWN,INPUT_PULLUP); // pullup Widerstand
}
void loop() { // Schleifenanfang
char buffer[10]; // Buffer fuer Ergebnis in ASCII-Code
static int counter = 0; // Up- und Down Counter
sprintf(buffer,“%04d“,counter); // Umrechnen Integer auf ASCII Sequenz
// Taste abfragen, kann prellen
if (digitalRead(PORTTASTEUP)==LOW) { // Uebergang High->Low
delay(20); // 20ms warten bis stabil
// haengt von der verwendeten Taste ab
// ob die Zeit ausreicht.
while (digitalRead(PORTTASTEUP)==LOW) { // dann Low auf High abwarten
// warten bis losgelassen !
}
counter++; /// Hier Zaehler hochzaehlen
delay(20); // auch nach dem loslassen nochmal warten
}
if (digitalRead(PORTTASTEDOWN)==LOW) { // High->Low bei Downtaste
delay(20); // 20ms warten bis stabil
// haengt von der verwendeten Taste ab
// ob die Zeit ausreicht.
while (digitalRead(PORTTASTEDOWN)==LOW) { // warten auf Low->high
// warten bis losgelassen !
}
counter--; // Diesmal runterzaehlen
delay(20); // auch nach dem loslassen nochmal warten
}
if (counter < 0) counter = 9999;
if (counter > 9999) counter = 0;
// Counter ausgeben mit aktuellem Stand
display_seg1x(i2cseg7x2bmsb1,buffer[0]); // msb zeichen/ LINKE Anzeige
display_seg1x(i2cseg7x2blsb1,buffer[1]); // ..
display_seg1x(i2cseg7x2amsb1,buffer[2]); // ..
display_seg1x(i2cseg7x2alsb1,buffer[3]); // lsb zeichen
}
Was passiert? Wenn man die obere
Taste drückt, sollte bei diesem Ver-
such der Zählerstand um genau eins
erhöht.
Bei der unteren Taste wird der Zäh-
lerstand um eins verringert. War er
vorher 0000 erscheint danach eine
9999.