User manual

19 20
4.4 Mehrere LEDs binär blinken lassen
Genaugenommen zeigen die LEDs einen Binärcode an. Dazu wird im Programm ein Zähler von 0 bis 15 verwen-
det. Die einzelnen Bits werden abgefragt und den LEDs dann entsprechend zugeordnet. Zu beachten ist, dass
die LEDs in der Reihenfolge 2, 3, 5, 4 liegen, was im Code auch entsprechend zugeordnet wird.
Im Code ist die Variable „counter“ als static deklariert, damit der Inhalt zwischen zwei Schleifen-Durchläufen
erhalten bleibt, wie bei einer globalen Variable.
Der Binärcode ist unten nochmal dargestellt. Der Zähler wird im Programm durch counter = counter + 1 reali-
siert. Nun käme es so zu einem Überlauf, da entweder 16 oder 32 Bit zur Verfügung stehen, je nach Implemen-
tierung. Mit dem &-Symbol wird eine logische UND-Verknüpfung erreicht, mit dem Wert 0xf ist der dezimale
Wert 15 gemeint, dieser bewirkt, dass der maximale Wert, der dem Counter zugewiesen werden kann, 15 ist.
+
-
9V
1A
Downsi de
UP
// DE_4 Mehrere LEDs binaer blinken lassen
#dene PORTLED2 2 // Denieren nun 4 LEDs
#dene PORTLED3 3 // fuer PD2,PD3,PD4,PD5
#dene PORTLED4 4 //
#dene PORTLED5 5
void setup() { // Startet die Initialisierung
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
}
void loop() {
static int counter = 0; // der Zaehlerstand bleibt erhalten
// da eine statische Variable verwendet wird
// Ohne static waere der Wert bei jedem Schleifendurchlauf
// auf 0 gesetzt
if (counter & 1) { // Bit 0 pruefen
digitalWrite(PORTLED4,HIGH); // rechte LED
} else digitalWrite(PORTLED4,LOW); //
if (counter & 2) { // Bit 1 pruefen
digitalWrite(PORTLED5,HIGH); // linke LED
} else digitalWrite(PORTLED5,LOW); // naechste
if (counter & 4) { // Bit 2 pruefen
digitalWrite(PORTLED3,HIGH); // // auf 1 setzen
} else digitalWrite(PORTLED3,LOW); // Reihenfolge !
if (counter & 8) { // Bit 3 pruefen
digitalWrite(PORTLED2,HIGH); // Dann erst LED 2 bei Bit 4
} else digitalWrite(PORTLED2,LOW); //
delay(1000); // Eine weitere Sekunde warten = 1000ms
counter = (counter + 1)& 0xf; // 0..15 Zaehler dann wieder auf 0 durch
Maske
} // Schleifenende
LED
LED
LED
LED
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
Dezimal Binär
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
Was passiert? Die vier LEDs zählen im Sekundentakt binär
von 0000 (alle aus), dann 0001, 0010, 0011 bis 1111 (alle an).