
Video
Schaltplan

Quellcode
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Knight-Rider-Lauflicht mit einstellbarer Geschwindigkeit
4// ─────────────────────────────────────────
5// Ein Potentiometer stellt die Geschwindigkeit des
6// Knight-Rider-LED-Effekts (hin und her) ein. A0 wird bei jedem Schritt
7// gelesen und der Wert 0-1023 wird zur Verzögerungszeit (ms).
8//
9// Pins:
10// D2, D3, D4, D5, D6, D7 -> 6 LEDs (der Reihe nach)
11// Jede LED mit 330-Ohm-Widerstand
12// A0 -> Schleifer des Potentiometers
13// (äußere Beinchen an 5V und GND)
14
15int ledPins[] = {2, 3, 4, 5, 6, 7}; // LED-Pins in Leuchtreihenfolge
16int potValue; // Potiwert = Verzögerung (ms)
17
18void setup() {
19 // Alle LED-Pins als Ausgänge setzen
20 for(int i = 0; i < 6; i++) {
21 pinMode(ledPins[i], OUTPUT);
22 }
23}
24
25void loop() {
26 // Vorwärts: D2 bis D7
27 for(int i = 0; i < 6; i++) {
28 potValue = analogRead(A0); // Geschwindigkeit lesen (0-1023)
29 digitalWrite(ledPins[i], HIGH);
30 delay(potValue); // So viele ms warten, wie der Potiwert angibt
31 digitalWrite(ledPins[i], LOW);
32 }
33
34 // Rückwärts: D6 bis D3. Die End-LEDs werden übersprungen, damit das Hin und Her nahtlos wirkt
35 for(int i = 4; i > 0; i--) {
36 potValue = analogRead(A0);
37 digitalWrite(ledPins[i], HIGH);
38 delay(potValue);
39 digitalWrite(ledPins[i], LOW);
40 }
41}
42FAQ
Was unterscheidet dieses Projekt von den vorherigen?▾
Der analoge Eingang (Potentiometer) wird mit einer bidirektionalen Schleife verbunden: Während das Licht hin und her läuft, wird der Potentiometerwert bei jedem Schritt ausgelesen und im Moment der Verzögerung aktualisiert. Dies bildet die Grundlage für die Anpassung des Verhaltens an den Sensorwert.
Der angezeigte Wert flackert – wie kann ich das beheben?▾
Bei analogen Messwerten sind geringe Schwankungen normal. Durch die Bildung des Durchschnitts aus mehreren Messwerten oder die Aufteilung des Wertes in gröbere Schritte mit der Funktion `map()` (z. B. in 10-ms-Schritten) lassen sich diese Schwankungen ausgleichen.
Kann ich anstelle des Potentiometers einen anderen Sensor verwenden?▾
Ja. Jeder Sensor, der einen analogen Ausgang wie ein LDR liefert, kann an denselben A0-Eingang angeschlossen werden; so kann beispielsweise die Lichtempfindlichkeit zunehmen, je dunkler die Umgebung wird. Du musst lediglich den Messbereich mit map() neu einstellen.
Welchen Analog-Pin soll ich verwenden?▾
Bei Uno können alle Pins zwischen A0 und A5 analoge Messwerte erfassen. Stelle sicher, dass der im Code verwendete Pin mit dem Anschluss in der Schaltung übereinstimmt; da A4 und A5 auch für I2C verwendet werden, solltest du A0 bevorzugen, falls du später ein Display anschließen möchtest.
