Problema sketch per accensione 8 led in sequenza "Knight Rider", in dissolvenza


salve tutti.

ho una board arduino uno e vorrei usare 8 led (invece che 6) per ricreare l'effetto luce 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 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 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 correggere il codice?
grazie per il vostro aiuto.

http://www.practicalmaker.com/arduino/arduino-enhanced-knight-rider

questo è il codice che ho modificato:
code: [select]
//set pin numbers have leds hooked to
int ledpin[]  ={
  3,5,6,9,10,11,12,13};
int n = 0;
int =0;
//dp sets active pin going right 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 number of pins have connected
int pins = 8;
int maxpin = (pins-1)+pins;
//intsteps how many steps between slower has more
//leds on , faster has less
int intsteps = 30;
int steps = pins*intsteps*2;
// max pwm output. can go 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 greater steps restart
  if(n >= steps){
    n=0;
  }
  //reset 1 rtl
  if(dp > maxpin){
    dp=1;
  }
  //reset q after rtl done
  if(q >= intsteps){
    q=0;
  }
  /*
this fun part.. took me forever working right.
   from 0 5 set active pin in array ledpin[0]
   100
   after 6 iteration subtract can go rtl
   ie. activepin 6 dp 1 set pin 5 100
   activepin 7 , dp 3 activepin 4
   if have 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 pins
  (i  = 0; <=(pins-1); i++)
  {
    if(value[i] >= 5){
      value[i]-=2;
    }
    else if (value[i] < 5) {
      value[i]=0;
    }
  }

  //write pins
  (i  = 0; <=(pins-1); i++)
  {
    analogwrite(ledpin[i], value [i]);
  }

  n+=1; // time stepper. tweak @ own risk.
  delay(delaytime); //speed modifier. tweak @ own risk!
}

non è possibile perché la uno non ha sufficienti pin per la modalità pwm.
passando alla leonardo avresti un pin in più. da 6 7. ma otto non arrivi.
non è un problema software ma hardware.
l'arduino mega ha 15 pin pwm.  :smiley-mr-green:


Arduino Forum > International > Italiano > Software (Moderator: leo72) > Problema sketch per accensione 8 led in sequenza "Knight Rider", in dissolvenza


arduino

Comments

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support