Go Down

Topic: CUBO 3X3X3 info e consigli (Read 7279 times) previous topic - next topic

Spack

Dec 31, 2012, 12:48 am Last Edit: Jan 03, 2013, 02:06 am by Spack Reason: 1
Ciao a tutti, ho realizzato un "cubo" in 2D in previsione della realizzazione di un cubo 5x5x5

I LED hanno l'anodo in comune per colonne e il catodo in comune per livelli.

I due anodi passando dalle rispettive resistenze vanno ai PIN 6e7
I due catodi passando da transistor BC337 NPN vanno a massa e ai PIN 2e3

So che si può programmare in modi diversi per ottenere lo stesso risultato.

Per fare un gioco di luci "a rotazione" ho scritto questo programma:

Code: [Select]
int LED1 = 7;
int LED2 = 6;
int LED3 = 5;
int LED4 = 4;
int TRA1 = 3;
int TRA2 = 2;

void setup (){
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode(TRA1, OUTPUT);
pinMode(TRA1, OUTPUT);

Serial.begin (9600);

}

void loop (){
 Serial.println ();
 
 
 digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (150);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (150);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (150);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (150);
 digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (150);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (150);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (150);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (150);
 
 // PRIMA VELOCITÁ CICLO X2 (1200)
 
 digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (100);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (100);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (100);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (100);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (100);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (100);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (100);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (100);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (100);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (100);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (100);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (100);
 
// SECONDA VELOCITÁ CICLO X2,5 (1200)
 
 digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
  digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (50);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (50);
 
 // TERZA VELOCITÁ CICLO X 6 (1200)


}


So per certo che potrei ovviare tutta la pappardella della ripetione del primo gioco mettendo una variabile e facendola arrivare a "0" ma non riesco... ho provato con "if"

Code: [Select]

int LED1 = 7;
int LED2 = 6;
int LED3 = 5;
int LED4 = 4;
int TRA1 = 3;
int TRA2 = 2;

void setup (){
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode(TRA1, OUTPUT);
pinMode(TRA1, OUTPUT);

Serial.begin (9600);

}

void loop (){
 Serial.println ();
 
int repeat=3

if (repeat; repeat=repeat-1);

if (repeat<0);

digitalWrite (seconda velocità) ----//ovviamente questo è quello che vorrei scrivere ma non riesco a tradurlo in C++
 
 digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (150);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, HIGH);
     digitalWrite (TRA1, LOW);
 delay (150);
  digitalWrite (LED1, LOW);
 digitalWrite (LED2, HIGH);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (150);
   digitalWrite (LED1, HIGH);
 digitalWrite (LED2, LOW);
  digitalWrite (TRA2, LOW);
     digitalWrite (TRA1, HIGH);
 delay (150);
}


Consigli?

tizio45

io lo sto facendo 3x3x3 o schema e sketc devi solo cambiare le resistenze in base ai led e i transistor che usi

uwefed

#2
Dec 31, 2012, 01:43 am Last Edit: Dec 31, 2012, 07:58 am by uwefed Reason: 1
Quote
Consigli?

Sí, impara a usare il if.

if (repeat<0);
Non esegue niente dopo perché lo hai concluso con il puntovirgola.

if (repeat; repeat=repeat-1);
se vuoi controllare se repeat é vero (diverso da 0) devi chiudere la parentesi dopo il repeat e lasciar via il puntovirgola
if (repeat) repeat=repeat-1;

Devi separare il multiplexing della matrice e l' aggiornamento della memoria "video".
Il multiplexing serve per accendere regolamente tutti i LED accesi. Deve avvenire almeno 30 volte al secondo in modo che non si veder farfallare i LED. I dati dei LED accesi vengono presi da un array di variabili che fungono da "memoria video".

L' aggionamento  del immagine da visualizzare avviene caricando i dati nell'array di variabili che fungono da "memoria video".
I dati da visualizzare vengono presi dalla memoria oppure calcolato in funzione del tempo e dell'immagine che si vuole visualizzare.
Ciao Uwe

Spack


io lo sto facendo 3x3x3 o schema e sketc devi solo cambiare le resistenze in base ai led e i transistor che usi


Grazie mille ma vorrei lavorare a un mio programma, così da poter apportare modifiche a ciò che conosco.

Io non ho studiato elettronica, ci arrivo per intuizione...


Quote
Consigli?

Si impara a usare il if.

if (repeat<0);
Non esegue niente dopo perché lo hai concluso con il puntovirgola.

if (repeat; repeat=repeat-1);
se vuoi controllare se repeat é vero (diverso da 0) devi chiudere la parentesi dopo il repeat e lasciar via il puntovirgola
if (repeat) repeat=repeat-1;
[...]


In quest'ultima funzione trova un errore e non carica. Ho ovviato con un while che comunque non vuole funzionare :(

Code: [Select]
void loop (){
  Serial.println ();
 
int repeat=5;

  while(repeat<=0);
{

  digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (150);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (150);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (150);
    digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (150);
 
  repeat=repeat-1;
}


Per fargli ripeter il ciclo 5 volte...

marcello.romani

Quote
while(repeat<=0);


Non vorrei sembrarti troppo "ruvido", ma prima di imbarcarti in un impresa come un cubo led devi imparare due cose:

1) la sintassi del C

2) come si usano gli array

Inoltre è molto importante per la leggibilità del codice che presti attenzione all'indentazione. CTRL-T nell'IDE ti dà una mano.

Spack

Ritornando all' "if"

Code: [Select]
int LED1 = 7;
int LED2 = 6;
int LED3 = 5;
int LED4 = 4;
int TRA1 = 3;
int TRA2 = 2;

void setup (){
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode(TRA1, OUTPUT);
pinMode(TRA1, OUTPUT);

Serial.begin (9600);

}
int repeat=20;
void loop (){
 
 
if (repeat) repeat=repeat-1;
{digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (150);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (150);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (150);
    digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (150); 
}

Serial.println (repeat);
 
  if (repeat) repeat<10; {
  digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (100);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (100);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (100);
    digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (100);
  }


if (repeat) repeat<0;
 
  digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (50);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  delay (50);
   digitalWrite (LED1, LOW);
  digitalWrite (LED2, HIGH);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (50);
    digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, LOW);
      digitalWrite (TRA1, HIGH);
  delay (50);
}


Vorrei che da 20 a 10 eseguisse la prima.
Da 10 a 0 eseguisse la seconda.
Da 0 o minore eseguisse la terza.

Invece le fa tutte una volta sola e riparte il loop

Spack


Quote
while(repeat<=0);


-- repeat minore o uguale a 0 --

Non vorrei sembrarti troppo "ruvido", ma prima di imbarcarti in un impresa come un cubo led devi imparare due cose:

1) la sintassi del C 

--ha funzioni simili html ma vengono definite diversamente--

2) come si usano gli array

Inoltre è molto importante per la leggibilità del codice che presti attenzione all'indentazione. CTRL-T nell'IDE ti dà una mano.


Vorrei fare pratica costruendo un cubo.

Sono partito a zero e ho 4 led saldati su una board che si accendono sequenzialmente come vorrei :P
Questo in un paio di giorni, ora, io riesco ad accendere i LED che voglio e gestirne i tempi ma vorrei sintetizzare il programma, perchè come hai notato per fare un solo gioco ho utilizzato quasi 300 righe.

Già il capire come poter associare una sequenza a un numero X di ripetizioni abbatterebbe il 50% del lavoro. devo capire "solo" come eseguire un repeat!

marcello.romani

Ok, provo ad essere un po' più costruttivo.

La sintassi del costrutto while() è:

Code: [Select]

while (condizione) {
    ... codice da eseguire più volte...
}


Se scrivi while(qualcosa); (nota il ; alla fine) il codice seguente tra graffe non è parte del ciclo.

Se vuoi eseguire un gruppo di istruzioni per un numero di volte prefissato usi invece for():

Code: [Select]

int numeroDiVolte = 5;

for (int i = 0; i < numeroDiVolte; i++) {
    .... codice da esegure numeroDiVolte volte
}


Poi una volta compresi gli array si riesce a scrivere codice molto meno ripetitivo.

(Cmq ripeto: lo studio del C/C++ (delle basi, intendo) è imprescindibile per concludere qualcosa con Arduino. Ad esempio http://www.cplusplus.com/doc/tutorial/  sezione contro structures spiega bene for(), while() e compagnia)

Spack

Not so easy, but it's ok, I'll try to give a quick read 'about that.

Anyway that's work!!!

Code: [Select]
for(int repeat=0;repeat<5;repeat++)  {
    digitalWrite (LED1, HIGH);
    digitalWrite (LED2, LOW);
    digitalWrite (TRA2, HIGH);
    digitalWrite (TRA1, LOW);
    delay (150);
    digitalWrite (LED1, LOW);
    digitalWrite (LED2, HIGH);
    digitalWrite (TRA2, HIGH);
    digitalWrite (TRA1, LOW);
    delay (150);
    digitalWrite (LED1, LOW);
    digitalWrite (LED2, HIGH);
    digitalWrite (TRA2, LOW);
    digitalWrite (TRA1, HIGH);
    delay (150);
    digitalWrite (LED1, HIGH);
    digitalWrite (LED2, LOW);
    digitalWrite (TRA2, LOW);
    digitalWrite (TRA1, HIGH);
    delay (150); 


adesso dovrò capire come ripetere l'array senza che mi dica che ci sono troppe graffe aperte :P

MA GRAZIEEEEEE!!!

Spack

"Probably the best way to start learning a programming language is by writing a program."

Prima riga del tutorial <3 ehhhhh

marcello.romani


"Probably the best way to start learning a programming language is by writing a program."

Prima riga del tutorial <3 ehhhhh


:D

writing a program => looking at actual code

uwefed


Ritornando all' "if"

Code: [Select]
...
if (repeat) repeat<0;
 
  digitalWrite (LED1, HIGH);
  digitalWrite (LED2, LOW);
   digitalWrite (TRA2, HIGH);
      digitalWrite (TRA1, LOW);
  ...



Se vuoi che tutto il codice dopo il if venga eseguito devi metterlo nelle parentesi graffe. Cosí come hai scritto esegue solo repeat<0;  che inoltre non fa niente a causa di un errore.
Per ripetere delle cose n-volte usa il for e non il while.

http://arduino.cc/en/Reference/If
http://arduino.cc/en/Reference/For

Ciao Uwe


Spack

Yeah, il "for" funziona bene :)

Oggi ho costruito il mio primo cubo 3x3x3 e solo ora che ho finito di saldare e testare tutto mi rendo conto della complessità del progetto. È un lavoro molto lungo e adesso mi dedicherò alla parte software.

(c'è un solo LED che è più fiacco degli altri, è al primo livello, non so proprio cos'abbia, tutti gli altri funzionano perfettamente. Comunque non lo smonterò...un solo LED non è abbastanza per farmi smontare quella diavoleria!)

Spack

Costruito il cubo 3x3x3 con queste caratteristiche:

_____________________
LED:

5 mm ad alta luminosità blu

Vf = 3,2-3,8 V

Corrente assorbita: 20mA

Luminosità: 8.000 mcd

Lunghezza d'onda: 465-470 nm

Angolo: 20-25°

TRANSISTOR:

BC337 NPN

RESISTENZE:

220 ?
_____________________

Mi sono reso conto che i transistor hanno qualche problema e credo derivi dalla corrente. In particolare i livelli non sono controllati, si accendono a prescindere dal comando.

Code: [Select]
int led9=51;
int led6=50;
int led8=49;
int led7=48;
int led1=47;
int led4=46;
int led3=43;
int led2=42;
int led5=39;
int lvl1=30;
int lvl2=29;
int lvl3=28;


void setup (){

  for(int pluripin=28; pluripin<=51; pluripin++)
    pinMode (pluripin,OUTPUT);

}

void loop (){

  for(int repeat=0; repeat<=5; repeat++) {
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
    digitalWrite (led5, HIGH);
    digitalWrite (lvl2, LOW);
delay (200);
    digitalWrite (led5, LOW);
    digitalWrite (lvl2, LOW);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
   digitalWrite (led5, HIGH);
    digitalWrite (lvl2, HIGH);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
    digitalWrite (led5, LOW);
    digitalWrite (lvl2, LOW);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
   digitalWrite (led5, HIGH);
    digitalWrite (lvl2, HIGH);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
    digitalWrite (led5, LOW);
    digitalWrite (lvl2, LOW);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led5, HIGH);
    digitalWrite (lvl2, HIGH);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
    digitalWrite (led5, LOW);
    digitalWrite (lvl2, LOW);
    digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led5, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (1500);
digitalWrite (led5, LOW);
digitalWrite (led4, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led4, LOW);
digitalWrite (led3, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led3, LOW);
digitalWrite (led2, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led2, LOW);
digitalWrite (led1, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led6, HIGH);
digitalWrite (led1, LOW);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
    delay (200);
    digitalWrite (led6, LOW);
digitalWrite (led7, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
    delay (200);
    digitalWrite (led8, HIGH);
digitalWrite (led7, LOW);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
    delay (200);
    digitalWrite (led9, HIGH);
digitalWrite (led8, LOW);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
    delay (200);
    digitalWrite (led4, HIGH);
digitalWrite (led9, LOW);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
    digitalWrite (led4, LOW);
digitalWrite (led3, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led3, LOW);
digitalWrite (led2, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led2, LOW);
digitalWrite (led1, HIGH);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl1, LOW);
    digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
digitalWrite (led7, HIGH);
digitalWrite (led8, HIGH);
digitalWrite (led9, HIGH);
digitalWrite (lvl1, LOW);
digitalWrite (lvl2, HIGH);
digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led1, HIGH);
digitalWrite (led2, HIGH);
digitalWrite (led3, HIGH);
digitalWrite (led4, HIGH);
digitalWrite (led5, HIGH);
digitalWrite (led6, HIGH);
digitalWrite (led7, HIGH);
digitalWrite (led8, HIGH);
digitalWrite (led9, HIGH);
digitalWrite (lvl1, HIGH);
digitalWrite (lvl2, LOW);
digitalWrite (lvl3, LOW);
delay (500);
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
digitalWrite (led3, LOW);
digitalWrite (led4, LOW);
digitalWrite (led5, LOW);
digitalWrite (led6, LOW);
digitalWrite (led7, LOW);
digitalWrite (led8, LOW);
digitalWrite (led9, LOW);
digitalWrite (lvl1, HIGH);
digitalWrite (lvl2, LOW);
digitalWrite (lvl3, LOW);
delay (200);
digitalWrite (led2, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led3, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led4, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led9, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led8, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led7, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led6, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led6, HIGH);
digitalWrite (lvl1, HIGH);
delay (200);
digitalWrite (led1, HIGH);
digitalWrite (lvl2, HIGH);
delay (500);
digitalWrite (led1, HIGH);
digitalWrite (lvl3, HIGH);
delay (500);
digitalWrite (led2, HIGH);
digitalWrite (lvl3, HIGH);
delay (500);
digitalWrite (led3, HIGH);
digitalWrite (lvl3, HIGH);
delay (500);



  }


}


Per cui ho deciso di provare a sostituire i 3 BC337 con un ULN2803 che dovrebbe poter gestire meglio la corrente.

marcello.romani

Come hai collegato i pin dell'arduino alla base dei transistor ? Immagino con una resistenza...

Per quanto riguarda il programma, beh direi che è il momento di imparare ad usare gli array :P

Nel frattempo potresti dichiarare una variabile d, assegnarle 200 e sostituire delay(200) con delay(d). In questo modo puoi variare la velocità della sequenza semplicemente modificando il valore assegnato a d (una sola volta invece di n) e ricaricare lo sketch.

Go Up