Salve a tutti.
Ho una board Arduino Uno e vorrei usare 8 led (invece che 6) per ricreare l'effetto luce a scia "Knight Rider" . Ho già visto che, sia sul web che nel forum Arduino, si trovano vari sketch ma ho preso come riferimento quello del video del link seguente (a mio avviso il migliore come risultato finale, che però utilizza soltanto 6 led) e l'ho provato a modificare per aggiungere altri 2 led, uno al pin 12 e l'altro al 13.
Il risultato finale è che non riesco purtroppo ad ottenere l'effetto di dissolvenza sperato per i 2 led che ho aggiunto, seppure la sequenza di accensione sinistra-destra e viceversa vada bene per tutti gli 8 led.
Non bravo in programmazione, potreste aiutarmi per favore a correggere il codice?
Grazie per il vostro aiuto.
Questo è il codice che ho modificato:
//set to pin numbers you have leds hooked up to
int ledpin[] ={
3,5,6,9,10,11,12,13};
int n = 0;
int i =0;
//dp sets the active pin going right to left
int dp = 1;
int value[] = {
0,0,0,0,0,0,0,0};
//active pin 0-5 used in ledpin array
int ap=0;
int q = 0;
//set this to number of pins you have connected
int pins = 8;
int maxpin = (pins-1)+pins;
//intsteps is how many steps between slower has more
//leds on and faster has less
int intsteps = 30;
int steps = pins*intsteps*2;
// max pwm output. can go up to 255
int maxpwm = 150;
// delaytime between cycles
int delaytime = 5;
void setup()
{
Serial.begin(9600);
}
void loop()
{
//active pin.. int doesn't store decimals.. bit ugly
int(ap) = n/intsteps;
//if cycles is greater than all the steps restart
if(n >= steps){
n=0;
}
//reset to 1 for rtl
if(dp > maxpin){
dp=1;
}
//reset q after rtl is done
if(q >= intsteps){
q=0;
}
/*
this is a fun part.. took me forever to get it working right.
from 0 to 5 we set the active pin in the array ledpin[0] to
100
after we get to the 6 iteration we subtract so we can go rtl
ie. activepin is 6 dp is 1 so we set pin 5 to 100
activepin is 7 and dp is now 3 so activepin is 4
if you have a better way let me know
*/
if(ap >= 0 && ap <= (pins-1)){
value[ap] = maxpwm;
}
else if(ap >= pins && ap <=maxpin){
value[ap-dp] = maxpwm;
q++;
if(q==intsteps){
dp+=2;
}
}
//fade all pins
for (i = 0; i <=(pins-1); i++)
{
if(value[i] >= 5){
value[i]-=2;
}
else if (value[i] < 5) {
value[i]=0;
}
}
//write to all pins
for (i = 0; i <=(pins-1); i++)
{
analogWrite(ledpin[i], value [i]);
}
n+=1; // time stepper. Tweak at your own risk.
delay(delaytime); //speed modifier. Tweak at your own risk!
}