int BitsSchieben = 8;
int AusgabePin = 9;
int EingangPin = 10;
// Array LEDs leuchten von außen nach innen und zurück
byte AussenNachInnen[] =
{
B10000001, B01000010, B00100100, B00011000,
B00100100, B01000010, B10000001
};
void setup()
{
pinMode(BitsSchieben, OUTPUT);
pinMode(AusgabePin, OUTPUT);
pinMode(EingangPin, OUTPUT);
}
void loop()
{
/*
Lauflicht vorwärts
LSBFIRST Bits von rechts ins Register schieben
dann jeweils 1 Bit nach rechts schieben
Startpunkt hängt davon ab, an welchen Pins die
1. Led und die weiteren LEDs gesteckt sind
*/
byte LED = B10000000;
// die letzte LED bleibt an
for (int i = 0; i <= 6; i++)
{
// Ausgaberegister ausschalten
digitalWrite(AusgabePin, 0);
// Bits von rechts in das Register schieben
shiftOut(EingangPin, BitsSchieben, LSBFIRST, LED);
// Ausgaberegister einschalten
digitalWrite(AusgabePin, 1);
delay(200);
// 1 Bit nach rechts schieben
LED = LED >> 1;
}
/*
durch die Verschiebung ist der aktuelle Stand:
LED = B00000001
Lauflicht rückwärts -> 1 Bit nach links schieben
*/
for (int i = 0; i <= 7; i++)
{
// Ausgaberegister ausschalten
digitalWrite(AusgabePin, 0);
// Bits von rechts in das Register schieben
shiftOut(EingangPin, BitsSchieben, LSBFIRST, LED);
// Ausgaberegister einschalten
digitalWrite(AusgabePin, 1);
delay(200);
// 1 Bit nach links schieben
LED = LED << 1;
}
// Lauflicht 2 LEDs vorwärts
LED = B11000000;
for (int i = 0; i <= 2; i++)
{
// Ausgaberegister ausschalten
digitalWrite(AusgabePin, 0);
// LSBFIRST -> Bits von rechts in das Register schieben
shiftOut(EingangPin, BitsSchieben, LSBFIRST, LED);
// Ausgaberegister einschalten
digitalWrite(AusgabePin, 1);
delay(200);
// 2 Bits nach rechts schieben
LED = LED >> 2;
}
// Lauflicht 2 LEDs rückwärts
for (int i = 0; i <= 3; i++)
{
// Ausgaberegister ausschalten
digitalWrite(AusgabePin, 0);
// Bits von links in das Register schieben
shiftOut(EingangPin, BitsSchieben, LSBFIRST, LED);
// Ausgaberegister einschalten
digitalWrite(AusgabePin, 1);
delay(200);
// 2 Bits nach links schieben
LED = LED << 2;
}
// Lauflicht -> LEDs gehen nach und nach aus
// LSBFIRST -> Bits von rechts in das Register schieben
LED = B11111111;
for (int i = 0; i <= 7; i++)
{
// Ausgaberegister ausschalten
digitalWrite(AusgabePin, 0);
// Bits in das Schiebregister schieben
shiftOut(EingangPin, BitsSchieben, LSBFIRST, LED);
// Ausgaberegister einschalten
digitalWrite(AusgabePin, 1);
delay(200);
// 1 Bit nach rechts schieben
LED = LED >> 1;
}
// LSBFIRST -> Bits von rechts in das Register schieben
LED = B11111111;
for (int i = 0; i <= 7; i++)
{
// Ausgaberegister ausschalten
digitalWrite(AusgabePin, 0);
// Bits in das Schiebregister schieben
shiftOut(EingangPin, BitsSchieben, LSBFIRST, LED);
// Ausgaberegister einschalten
digitalWrite(AusgabePin, 1);
delay(200);
// 1 Bit nach links schieben
LED = LED << 1;
}
// LEDS leuchten von außen nach innen und zurück
// Array AussenNachInnen
for (int i = 0; i <= 6; i++)
{
digitalWrite(AusgabePin, 0);
shiftOut(EingangPin, BitsSchieben, MSBFIRST, AussenNachInnen[i]);
digitalWrite(AusgabePin, 1);
delay(200);
}
// alle LEDs blinken
for (int i = 0; i <= 6; i++)
{
digitalWrite(AusgabePin, 0);
shiftOut(EingangPin, BitsSchieben, MSBFIRST, LED);
digitalWrite(AusgabePin, 1);
delay(200);
// alle Werte umkehren
LED = ~ LED;
}
// MSBFIRST -> Bits von links in das Register schieben
// jede zweite LED im Wechsel
LED = B10101010;
for (int i = 0; i <= 6; i++)
{
digitalWrite(AusgabePin, 0);
shiftOut(EingangPin, BitsSchieben, MSBFIRST, LED);
digitalWrite(AusgabePin, 1);
delay(200);
// alle Werte umkehren
LED = ! LED;
}
// jeweils 2 LEDs im Wechsel
LED = B11001100;
for (int i = 0; i <= 6; i++)
{
digitalWrite(AusgabePin, 0);
shiftOut(EingangPin, BitsSchieben, MSBFIRST, LED);
digitalWrite(AusgabePin, 1);
delay(200);
// alle Werte umkehren
LED = ~ LED;
}
// äußere LEDs/innere LEDs im Wechsel
LED = B11000011;
for (int i = 0; i <= 6; i++)
{
digitalWrite(AusgabePin, 0);
shiftOut(EingangPin, BitsSchieben, MSBFIRST, LED);
digitalWrite(AusgabePin, 1);
delay(200);
// alle Werte umkehren
LED = ~ LED;
}
}
Letzte Aktualisierung: