User manual

27 28
4.8 Lauicht Geschwingkeit steuern
Mit einer zusätzlichen Taste soll die Lauichtgeschwindigkeit umgeschaltet werden können. Dazu verwenden
wir einen der B-Ports, der multifunktional belegt ist. Hier bezeichnet als das Signal MOSI, welches von Port B3
kommt und mit #11 als Parameter angesprochen werden kann. MOSI steht für „Master Out Slave In“ und wird
eigentlich für die eingebaute SPI Schnittstelle verwendet (bestehend aus MOSI+MISO+SCK). Man kann diese
Pins aber ganz normal als IO-Ports verwenden, wie in unserem Beispiel.
+
-
9V
1A
Downsi de
UP
LED
LED
LED
LED
LED
LED
Portbelegung
Kürzel Port Parameter
SCK PB5 #13
MOSI PB3 #11
B1 PB1 #9
SS PB2 #10
MISO PB4 #12
B0 PB0 #8
Wenn man die Taste gedrückt hält so wird der Lauichzyklus schneller.
// DE_8 Lauicht mit Taste - Geschwindigkeit steuern
#dene PORTLED2 2 // LEDs and POrt PD2-PD7
#dene PORTLED3 3
#dene PORTLED4 4
#dene PORTLED5 5
#dene PORTLED6 6
#dene PORTLED7 7
#dene SWITCHB3MOSI 11 // Nun Port PB3 =#11 als Eingang
// er traegt den Namen MOSI auf unserem Brick da er eine
// doppelte Bedeutung hat.
void setup() { // IOs 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(PORTLED6,OUTPUT); // Port 6 als Ausgang schalten
pinMode(PORTLED7,OUTPUT); // Port 7 als Ausgang schalten
pinMode(SWITCHB3MOSI,INPUT_PULLUP); // MOSI verwenden
}
void loop() {
static int shiftreg = 1; // Lauicht Startbit 6 Bits werden verwendet
if (shiftreg & 1) { // Bit 0 pruefen bis Bit 5
digitalWrite(PORTLED6,HIGH); // rechte LED
} else digitalWrite(PORTLED6,LOW); //
if (shiftreg & 2) { // Bit 1 pruefen
digitalWrite(PORTLED7,HIGH); // linke LED
} else digitalWrite(PORTLED7,LOW); //
if (shiftreg & 4) { // Bit 2 pruefen
digitalWrite(PORTLED4,HIGH); //
} else digitalWrite(PORTLED4,LOW); //
if (shiftreg & 8) { // Bit 3 pruefen
digitalWrite(PORTLED5,HIGH); //
} else digitalWrite(PORTLED5,LOW); //
if (shiftreg & 0x10) { // Bit 4 pruefen
digitalWrite(PORTLED3,HIGH); //
} else digitalWrite(PORTLED3,LOW); //
if (shiftreg & 0x20) { // Bit 5 pruefen
digitalWrite(PORTLED2,HIGH); //
} else digitalWrite(PORTLED2,LOW); //
//
if (digitalRead(SWITCHB3MOSI)==LOW) { // bzw. PORT PB3 #11
delay(50); // 50 ms warten also sehr schnell
} else {
delay(300); // 300 ms warten langsamer
}
shiftreg = shiftreg << 1; // 1,2,4,8,16,32 dann wieder 1,2,3,4...
if (shiftreg > 32) shiftreg = 1; // dann wieder von Vorne. auf 1 setzen
} // Ende der Schleife
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? Von den 6 LEDs geht
immer genau eine an, die anderen
sind dunkel. Dabei wandert das
Licht von rechts nach links durch.
Der Wechsel zur nächsten LED
geschieht nun in Abhängigkeit
der Taste unterschiedlich schnell.
Entweder beim Drücken alle 50ms
sonst alle 300ms. Danach wieder-
holt sich der ganze Zyklus.