Hallo
Ich habe mir gestern eine über einen Poti steuerbare Lichtreihe aus 8 LEDs und einem Arduino Uno zusammengebaut. Je weiter man den Poti aufdreht, desto mehr LEDs leuchten und umgekehrt.
Die LEDs habe ich an die digitalen Ausgänge 3 bis 10 vom Arduino ausgeschlossen und folgendes Programm geschrieben.
int i = 0; // Zähler
int PIN = 3 ; // Ausgang für erste LED
int potpin = 0; // Analog-PIN vom Poti
int val; // Wert vom Poti
void setup(){
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
}
void loop(){
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 8);
{
while(i<val){
digitalWrite(PIN,HIGH);
PIN++;
i++;
}
while(i>=val){
digitalWrite(PIN,LOW);
PIN--;
i--;
}
}
}
Alles funktioniert zwar wie gewünscht, aber mein Konstrukt aus 2 while Schleifen und ++ und -- gefällt mir nicht besonders. Und nachvollziehen, was da beim Drehen am Poti so alles im Arduino vor sich geht, kann ich auch nur mit Mühe.
i 0 val 0 Alle LEDs aus
i 0 val 1 PIN 3 an
i 1 val 2 PIN 4 an
i 2 val 3 PIN 5 an
i 3 val 4 PIN 6 an
i 4 val 5 PIN 7 an
i 5 val 6 PIN 8 an
i 6 val 7 PIN 9 an
i 7 val 8 PIN 10 an
i 8 val 8 Alle LEDs an
i 8 val 7 PIN 10 aus
i 7 val 6 PIN 9 aus
i 6 val 5 PIN 8 aus
i 5 val 4 PIN 7 aus
i 4 val 3 PIN 6 aus
i 3 val 2 PIN 5 aus
i 2 val 1 PIN 4 aus
i 1 val 0 PIN 3 aus
i 0 val 0 PIN 2
Kann man das Ganze auch eleganter programmieren?
Gruß
Atalanttore