Die LEDs sollen als Lauflicht und in verschiedenen Kombination leuchten:
- Lauflicht hin und zurück
- alle LEDs
- die LEDs 7 5 3
- die beiden inneren LEDs
- die beiden äußeren LEDs
- alle außer den äußeren LEDs
- nur die mittlere
So sieht es aus:
Die digitalen und die analogen Pins des Arduinos sind in drei Gruppen aufgeteilt:
Funktionen wie digitalWrite() und digitalRead() sind relativ langsam in der Ausführung und manchmal werden Programme mit vielen Ein- oder Ausgängen komplex und schwer überschaubar.Deshalb ist es oft übersichtlicher die Pins mithilfe der Ports zu definieren und zu schalten.
Es existieren drei sogenannte Register:
Register | Funktion |
---|---|
DDR(D,B,C) | Pins als INPUT = 0 oder als OUTPUT = 1 definieren |
PORT(D,B,C) | Pins als HIGH = 1 oder als LOW = 0 festlegen |
PIN(D,B,C) | gibt den Zustand der Pins an, die im DDR-Register auf Input gesetzt wurden |
Das Register wird jeweils mit dem Namen des Ports (D, B oder C) ergänzt.
Beim Zugriff auf die Ports wird jeweils ein Bit gesetzt. Sein Wert ist entweder 1 = an, oder 0 = aus
Beispiele:
Digitale Pins 7, 6, 5, 4 und 3 als OUTPUT setzen
DDRD = B11111000;
Digitale Pins 7, 6, 5, 4 und 3 auf HIGH setzen:
PORTD = B11111000;
Taster an Pin 11 als INPUT setzen
DDRB = B00001000;
PULL_UP-Widerstand an Pin 11 einschalten
PORTB = B00001000;
Einzelne Bits werden mit den Operatoren << eine Position nach links und >> eine Position nach rechts verschoben.
Nach rechts schieben:
PORTD = PORTD >> 1;
PORTD = PORTD >> 1;
PORTD = PORTD >> 1;
PORTD = PORTD >> 1;
PORTD = PORTD >> 1;
Nach links schieben:
PORTD = PORTD << 1;
PORTD = PORTD << 1;
PORTD = PORTD << 1;
PORTD = PORTD << 1;
PORTD = PORTD << 1;
Der Parameter ~ kehrt den Wert eines Bits um:
// LEDs an den Pins 7 5 3 leuchten
PORTD = B10101000;
// Werte umkehren, aus 0 wird 1 und aus 1 wird 0
PORTD = ~PORTD;
// PORTD hat jetzt den Wert B01010111
// -> Die LEDs an den Pins 6 4 leuchten (Pins 2 bis 0 sind nicht belegt)
Benötigte Bauteile:
- 5 LEDs
- 3 Widerstände 220 Ω (gelbe, rote und grüne LED)
- 2 Widerstände 100 Ω (blaue und weiße LED)
- Leitungsdrähte
Beachte die ⇒Vorwiderstände verschiedener LEDs
Baue die Schaltung auf:
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Das Programm. Beachte die Kommentare.
int Leuchtdauer = 200;
void setup()
{
// Pins 7 bis 3 als OUTPUT definieren
DDRD = B11111000;
}
void loop()
{
// Lauflicht hin Start mit LED Pin 7
PORTD = B10000000;
delay(Leuchtdauer);
for (int i = 0; i < 4; i++)
{
/*
1 Bit nach rechts schieben
B01000000 -> Pin 6
B00100000 -> Pin 5
B00010000 -> Pin 4
B00001000 -> Pin 3
*/
PORTD = PORTD >> 1;
delay(Leuchtdauer);
}
// Lauflicht zurück Start mit LED Pin 3
PORTD = B00001000;
delay(Leuchtdauer);
for (int i = 0; i < 4; i++)
{
/*
1 Bit nach links schieben
B00010000 -> Pin 4
B00100000 -> Pin 5
B01000000 -> Pin 6
B10000000 -> Pin 7
*/
PORTD = PORTD << 1;
delay(Leuchtdauer);
}
delay(Leuchtdauer);
// alle LEDs
PORTD = B11111000;
delay(1000);
// alle aus
PORTD = B00000000;
delay(1000);
// LEDs an den Pins 7 5 3 leuchten
PORTD = B10101000;
delay(1000);
// umkehren
PORTD = ~PORTD;
delay(1000);
// die beiden äußeren
PORTD = B10001000;
delay(1000);
// die inneren
PORTD = ~PORTD;;
delay(1000);
// nur die mittlere
PORTD = B00100000;
delay(1000);
// alle aus
PORTD = B00000000;
delay(1000);
}
Verwandte Anleitungen:
- Blinkende LED
- Blinkende LED mit einem Potentiometer
- Blinkende LEDs mit Multithreading
- Farbe und Helligkeit eines LED-Streifens mit Potentiometern manipulieren
- Farbenspiele mit einem LED-Streifen
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
- Lauflicht
- Lauflicht mit blinkenden LEDs
- Wechselblinker mit einem Relais
- LEDs mit einem Joystick-Shield schalten
- LEDs mit dem UDP-Protokoll im LAN schalten
- LEDs ohne Pulsweitenmodulation dimmen
- LEDs mit dem Schieberegister 74HC595 steuern
- LEDs mit einem Taster steuern
- Wechselblinker
- Würfeln mit LEDs
Letzte Aktualisierung: