Accensione led ogni mezzo secondo

Buonasera. Io ho 9 led: entrambi i led hanno il loro cavo negativo, mentre i cavi positivi sono solo 3 (5, 2, 2; led per cavo). I positivi sono collegati alla porta 5v (attraverso una breadbord), mentre i negativi sono collegati alle porte 1,2,3,4,5,6,7,8,9 Io vorrei che all'accensione di Arduino si accendesse il led 1, dopo mezzo secondo si accende il 2, dopo un altro mezzo secondo si accende il 3 [.....]. Al termine, sempre ogni mezzo secondo, partendo dal 9, si dovrebbero spegnere. E' possibile???

Grazie mille a tutti :)

E' possibile. Basta usare millis. Studiati l'esempio BlinkWithoutDelay e la miriade di esempi presenti sul forum ed in rete. E soprattutto metti le resistenze sui Led sennò li bruci e con loro i pin a cui li hai attaccati.

io lo sketch lo avevo già preparato, ma devo avere sbagliato qualcosa perchè non funziona... ora sto usando il cell, dopo scuola ti posto il mio sketch

p.s. che tipo di resistenze devo mettere??

resistenze di limitazione della corrente, calcolate per il tipo di led (colore) che usi. Non puoi collegare un led ad un pin in maniera diretta, bruci l'uscita del microcontrollore perché non metti un "freno" alla corrente che eroga verso il Led. ;)

Non usare i pin 0 e 1 perché servono per il collegamento con USB. Calcola le resistenze in modo che circola una corrente di 10mA. Ciao Uwe

Scusate l'ignoranza.... come faccio a calcolare il valore della resistenza??? I led sono: 5 verdi, 2 gialli e 2 rossi

Grazie

A seconda dei Volt che usi e del tipo di led, in allegato

Ho solo resistenze da 220… potrebbero esserci problemi se circola qualche ma in più???

Ho alcuni problemi con il codice...

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
int led9 = 10;



void setup(){
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
} 
  
void loop(){
  digitalWrite(led1, HIGH);
  delay(500);
  digitalWrite(led2, HIGH);
  delay(500);
  digitalWrite(led1, LOW);
  delay(500);

}

(per fare più in fretta ho impostato solo il lampeggio del led 1 e 2)

RISULTATO: - I led 2,3,4,5,6,7,8,9 si accendono - Dopo mezzo secondo, il led 2 si spegne - Il led 1 inizia a lampeggiare ogni mezzo secondo all'infinito

ciao.
ricapitolando:

Io ho 9 led: entrambi i led hanno il loro cavo negativo, mentre i cavi positivi sono solo 3 (5, 2, 2; led per cavo).
I positivi sono collegati alla porta 5v (attraverso una breadbord), mentre i negativi sono collegati alle porte 1,2,3,4,5,6,7,8,9

quindi si accendono quando metti l’uscita a LOW.

Leggendo il codice postato… fà quello che gli hai detto di fare :).

Secondo me ti conviene dichiarare i pin dei led con un array e poi scorrerlo con un ciclo for per accendere e poi spegnere i led.

esempio ( scrivo a braccio quindi sicuramente NON funziona :))

int led[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10};
...
  for (int i=0 i<=8 i++) { // da 0 a 8
       digitalWrite(led[i],LOW); // accende il led
       delay(500);
       }

eccetera.

ciao
pippo72

EDIT: Occhio all’assorbimento accendendo tutti i led insieme.

livellacri: Ho solo resistenze da 220... potrebbero esserci problemi se circola qualche ma in più????

Piuttosto che in più, fanne circolare in meno ;) Metti 2 R in serie, così la loro resistenza si somma, per cui 220+220 = 440 ohm. Ed hai un valore che va bene per la maggior parte del LED comuni (rosso, verde, giallo) senza bisogno di fare calcoli (usando i 5V di Arduino).

  for (int i=0 i<=8 i++) { // da 0 a 8

perchè da 0 a 8 ??? che cosa rappresentano???

help..... sto provando codici da tutto il giorno!!! non riesco a farlo andare!

Ma se non ne posti uno, per sapere a che punto, sei come si fa ad aiutarti?

livellacri:
perchè da 0 a 8 ??? che cosa rappresentano???

andiamo con ordine:

int led[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10};

creo un array di nove elementi che corrispondono ai pin dove sono collegati i led.

for (int i=0 i<=8 i++)

questo ciclo for “conta” da 0 a 8 e questi numeri rappresentano l’indice dell’array.
L’indice dell’array parte appunto da 0 e non da 1

digitalWrite(led[i],LOW);

accendo il led corrispondente all’indice dell’array ovvero:
quando i = 0 , l’array led[0] =2 quindi è come scrivere digitalWrite(2,LOW);
quando i = 1 , l’array led[1] =3 quindi è come scrivere digitalWrite(3,LOW);
eccetera.

spero di esserer stato chiaro.

ciao
pippo72