arduino e il tempo

Come faccio ad accendere tre led in tre momenti diversi lasciandoli accesi tutti e tre?

grazie

ciao livia... :wink: anch'io ho più o meno lo stesso problema...
ma con che input accendi i led?
io vorrei far scattare un conto alla rovescia una volta dato l'input con un sensore magnetico e far accendere 3 led in momenti diversi... ma nn mi è chiaro come far partire il conto alla rovescia...

speriamo che qualcuno riesca ad aiutarci...
grazie in anticipo..

Ciao Alessia...finalmente qualcuno risponde!!
Anche se non abbiamo la soluzione almeno possiamo condividere il problema!!
Noi come imput abbiamo un pulsante, e vorremmo che utilizzando quello stesso pulsante si accendesse un led diverso ad ogni pressione.
Per il conto alla rovescia non so neanche io come si possa fare, anche noi volevamo fare qualcosa di simile con un timer magari anche esterno ad arduino però purtroppo da soli non ci stiamo capendo molto e non abbiamo ricevuto molte risposte!!
In bocca al lupo e il primo che ci capisce qualcosa scrive :wink:

grazie

ragazzi io ho scritto un programmino che permette di accendere un led dopo l'altro e di farli restare accesi.. anche se ci ho perso tutta la mattina a me nn serve perchè nn riesco a capire come spegnere i led... ecco il codice:

/* i tre led si accendono uno dopo l'altro a intervalli di 3 secondi */
int inPin = 8; // choose the input pin (sensor or pushbutton)
int val = 0; // variable for reading the pin status

int timer = 3000; // The higher the number, the slower the timing. (300000=5 min)
int pins[] = { 2, 3, 4 }; // an array of pin numbers (i pin in cui vanno inseriti i led)
int num_pins = 3; // the number of pins (i.e. the length of the array)

void setup(void)
{
pinMode(inPin, INPUT); // declare sensor as input
int i;
for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num_pins - 1
pinMode(pins*, OUTPUT); // set each pin as an output*
}
void loop(void)
{

  • val = digitalRead(inPin); // read input value*
  • if (val == LOW)*
  • {*
  • int i;*
  • for (i = 0; i < num_pins; i++) // loop through each pin...*
  • {*
    _ digitalWrite(pins*, HIGH); // turning it on,_
    _
    delay(timer); // pausing,_
    _
    }_
    _
    }_
    _
    }[/quote]*_
    qualcuno sa dirmi come faccio a spegnere i led, cambiando il valore dell'if nn ci sono riuscita e nemmeno usando l'else.. aiuto!!

grazieeee!!! adesso ci proviamo... se riesco a capire come spegnerli ti faccio sapere!!!
buon lavoro!!

CIao, se posso essere utile....
Oltre alla delizia di trovare due ragazze alle prese con programmazione e led, tasti, microcontrollori etc.... :wink:
Beh, per accendere (in questo caso in sequenza) e spegnere i led (per ora in un colpo solo) utilizzando lo stesso tasto, dovrete utilizzare un elemento di memoria. Dovrete memorizzare uno "stato" in termini tecnici.
Può essere una semplice variabile, che vale 0 o 1.
Diciamo che all'inizio del prog la mettete a zero così partite da una situaizone nota.
Nel loop, dopo esservi accorti della pressione del tasto andate a controllare il valore di questa variabile.
Se è zero (per convenzione) fate accendere i tre led in sequenza (andando ad eseguire il loop che avete già scritto) e subito dopo cambiate ilvalore della variabile di stato a UNO.
Se, dopo il controllo del tasto il valore della variabile è UNO, spegnete tutti i led insieme (potete utilizzare una copia del loop che avete già mettendo i pin a LOW e togliendo il delay(timer). Ricordatevi, dopo questo blocco, di mettere la variabile di STATO a ZERO.
Sembra un pò circonvoluto ma di solito si fa così.........

spero di avervi aiutato e non il contrario!!!!

cià!

Grazie! Abbiamo provato a capire ciò che ci hai spiegato, però purtroppo non siamo riusciti a programmare correttamente arduino seguendo il tuo schema... tieni presente che è la prima volta che maneggiamo arduino e a parte far lampeggiare un led con il primo tutorial, il resto ci risulta un po' sfuggevole... :smiley:
Possiamo sfruttare la tua disponibilità chiedendoti, se ti va, di farci un esempio di codice secondo quella variabile? Per caso conosci anche un'alternativa al bluetooth per far comunicare arduino con un dispositivo esterno contenente solo i pulsanti (sarebbero i pulsanti che utilizziamo per l'attivazione dei Led e degli altri output, ma distaccati)? Ciao e grazie di nuovo!!

Parto dal vostro software e modifico. Non garantisco sul funzionamento perchè non ho una scheda pronta...

/* i tre led si accendono uno dopo l'altro a intervalli di 3 secondi */
int inPin = 8; // choose the input pin (sensor or pushbutton)
int val = 0; // variable for reading the pin status
int stato = 0; //variabile di stato per ON OFF

int timer = 3000; // The higher the number, the slower the timing. (300000=5 min)
int pins[] = { 2, 3, 4 }; // an array of pin numbers (i pin in cui vanno inseriti i led)
int num_pins = 3; // the number of pins (i.e. the length of the array)

void setup(void)
{
pinMode(inPin, INPUT); // declare sensor as input
int i;
for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num_pins - 1
pinMode(pins*, OUTPUT); // set each pin as an output*
}
void loop(void)
{
val = digitalRead(inPin); // read input value
if (val == LOW) // il tasto è premuto??????????

  • {*
  • if (stato == 0)*
  • {*
  • stato = 1; //aggiorna stato, al prossimo 'giro' spegni i led!*
  • int i;*
  • for (i = 0; i < num_pins; i++) // loop through each pin...*
  • {*
    _ digitalWrite(pins*, HIGH); // turning it on,_
    _
    delay(timer); // pausing,_
    _
    }_
    _
    }_
    _
    else*_
    * {*
    * stato = 0; //aggiorna stato, alprossimo giro accendi!*
    * digitalWrite(2, LOW); // spegni i tre led (accesso diretto ai pins, è un modo diverso di utilizzare le strutture di arduino)*
    * digitalWrite(3, LOW); // non molto elegante, a dire il vero, ma sicuramente più CHIARO!*
    * digitalWrite(4, LOW); //*
    * delay(300); // un piccolo ritardo giusto per fare da antirimbalzo.....*

* }*
* }*
}
Allora,
dovrebbe andare.
Ora, allo start-up i led sono spenti, arduino aspetta che premiate il tasto per la prima volta e accende in sequenza i tre led.
Quando ripremete il tasto viene eseguito l'ELSE e i led vengono spenti.
Ho messo un ritardino dopo lo spegnimento perchè, se per caso avete ancora il dito sul pulsantino (molto probabile visto che queste istruzioni vengono eseguite in pochi microsecondi) e il contatto di questo continua a 'rimbalzare', il software potrebbe saltare subito all'accensione dei led....
Ogni contatto elettromeccanico (e quindi anche un pulsantino) ha, per la natura fisica dei suoi componenti, delle oscillazioni che, nella scala dei tempi microscopici a cui agisce Arduino potrebbero venire interpretati come ON/OFF/ON/OFF/ON/OFF etc.....
Di solito si 'filtrano' via software gli ingressi legati ai pulsanti.
Cercato 'debouncing' sul forum c'è sicuramente qualcosa............
fatemi saper!

Grazie!!! Ci siamo riusciti!
Ti ringraziamo tantissimo, ci hai salvato un esame... (speriamo!)!!! :smiley:
Il codice che hai scritto tu funziona e non c'è stato bisogno di correggerlo (ammesso che avremmo saputo farlo)...
A presto!

Livia

Beh in bocca allupo...
fate sapere come è andata :slight_smile:

grazie vectorsynth!!
il tuo aiuto è stato prezioso anche per me... sono finalmente riuscita a scrivere il codice che mi serviva... che è diverso dal tuo, perchè io voglio accendere solo un led alla volta e perchè al posto del bottone uso un sensore magnetico, quindi volevo far attivare i led solo quando la calamita è appoggiata sul sensore...
posto il codice che ho scritto:

/* i tre led si accendono uno dopo l'altro a intervalli di 5 minuti, quando la calamita è appoggiata sul sensore magnetico, mentre non accade nulla, se la calamita è staccata.
il sensore è attaccato al pin 8 e a 5V e gnd (sotto)
i led sono attaccati tutti a GND e ai pin della matrice*/

int inPin = 8; // choose the input pin (sensor)
int val = 0; // variable for reading the pin status

int timer = 3000; // The higher the number, the slower the timing. (300000=5 min)
int pins[] = { 2, 3, 4 }; // an array of pin numbers
int num_pins = 3; // the number of pins (i.e. the length of the array)

void setup(void)
{
pinMode(inPin, INPUT); // declare sensor as input

int i;
for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num_pins - 1
pinMode(pins*, OUTPUT); // set each pin as an output*
}
void loop(void)
{

  • val = digitalRead(inPin); // read input value*
  • if (val == LOW)*
  • {*
  • int i;*
  • for (i = 0; i < num_pins; i++) // loop through each pin...*
  • {*
    _ digitalWrite(pins*, HIGH); // turning it on,_
    _
    delay(timer); // pausing,_
    _ digitalWrite(pins, LOW); // and turning it off.
    }
    }
    if (val == HIGH)
    {
    int i;_
    for (i = num_pins - 1; i >= 0; i--)
    _ {
    digitalWrite(i, LOW);
    }
    }
    }[/quote]*
    ora il mio problema è di tipo più concreto... vorrei attaccare quattro led per ogni pin... che tipo di resistenza uso e come le metto??
    grazie.. a presto_

ora che resistenza usi?

al momento le ho messe a caso...
i led sono alimentati tutti dalla presa usb.. nn ho bisogno che facciano molta luce ma ne devo metter 4 perchè devo retroilluminare una superficie in modo uniforme.. i led devo stare accesi max 5 minuti alla volta...

grazie del tuo aiuto.. :slight_smile:

mettendo i 4 led in serie, con 5v della usb, quasi non ti servono resistenze... Ma mettici una 22ohm per sicurezza..... non si sa mai!Se non si accendono 'bene' toglila!

ma una curiosità... che scuola frequentate?
D.

studiamo disegno industriale alla facoltà di archittettura Quaroni della Sapienza (a Roma), arduino ci serve per fare dei prototipi per il corso di product design.

visto che sei così gentile approfitto di te... ::slight_smile: io devo collegare questi dodici led (4 per pin), ma nn mi è chiaro come devo fare.. ti spiego come avevo pensato di fare: collego tutte le barre corte dei led tra loro e poi a GND, mentre collego le barre lunghe dei led tra loro 4 per volta e poi al corrispettivo pin, le resistenze penso di non usarle.. pensi che possa andare?
pensavo di collegare tutto con dei fili di rame e di saldare con lo stagno, può andare?

grazie

no no! .......non va molto bene!
i led collegali in serie (cioè una zampa lunga con una corta e via dicendo).
Alla fine hai da collegare una lunga ed una corta esattamente come prima.
Ah.. si chiamano Anodo e Catodo!!! :slight_smile:

ciau!