Go Down

Topic: Led lampeggiante per 30 secondi (Read 3632 times) previous topic - next topic

Giobe

Salve a tutti, vorrei creare un circuito con arduino che mi consenta di far lampeggiare un led per trenta secondi dopo la pressione di un pulsante. Sono arrivato al punto di far lampeggiare il led ma non so qual'è la funzione che mi permette di farlo lampeggiare per 30 secondi, mi potete aiutare magari dicendomi qual'è il comando ?
Grazie anticipatamente.
Gio

tonid

Potresti ad esempio contare il numero di lampeggi necessari per arrivare a 30 secondi.
Se accendi il led per 1/2 secondo e lo spegni per 1/2 secondo sai che ogni ciclo impiega 1 secondo,conti 30 lampeggi ed interrompi .

uwefed

oppure controlli con millis() se sono passate 30 secondi.
http://arduino.cc/en/Tutorial/BlinkWithoutDelay
Ciao Uwe

Giobe


Potresti ad esempio contare il numero di lampeggi necessari per arrivare a 30 secondi.
Se accendi il led per 1/2 secondo e lo spegni per 1/2 secondo sai che ogni ciclo impiega 1 secondo,conti 30 lampeggi ed interrompi .


Potrebbe essere una soluzione, ma quale'è la funzione?
Gio

uwefed

Nessuna funzione particolare.
Incrementi una variabile ogni volta che accendi il led che lampeggia e poi controlli se la variabile ha raggunto il valore corrispondente ai 30 secondi.
Ciao Uwe

tonid

Quote
Nessuna funzione particolare.
Incrementi una variabile ogni volta che accendi il led che lampeggia e poi controlli se la variabile ha raggunto il valore corrispondente ai 30 secondi.
Ciao Uwe

Esatto  ;)


Giobe

#7
Nov 25, 2012, 11:35 pm Last Edit: Nov 25, 2012, 11:45 pm by Giobe Reason: 1
Sto diventando matto, e da questa mattina che faccio prove ma non ho capito come far funzionare il conteggio.
Ho provato con un listato trovato in rete
Code: [Select]


#define LED 13                // LED collegato al pin digitale 13  
#define BUTTON 7              // pin di input dove è collegato il pulsante  
int val = 0;                  // si userà val per conservare lo stato del pin di input  
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso  

void setup() {  
 pinMode(LED, OUTPUT);       // imposta il pin digitale come output  
 pinMode(BUTTON, INPUT);     // imposta il pin digitale come input  
}  

void loop() {  
 val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva  

 // controlla se è accaduto qualcosa  
 if ((val == HIGH)){  
   stato = 1 - stato;  
   delay(15);                // attesa di 15 millisecondi  
 }  



 if (stato == 1) {  
   digitalWrite(LED, HIGH);  // accende il LED  
   delay(500);              // aspetta un secondo  
   digitalWrite(LED, LOW);   // spegne il LED  
   delay(500); // aspetta un secondo
 }              

 for (int i = 0; i<10; i++);  
 {
   digitalWrite(LED, LOW);   // spegne il LED
 }              
}


niente, mi potete aiutare ?

Gio

ivan64

Così funziona, anche se non è proprio corretto, il pulsante può prendere dei 'colpi'.... e ricorda di mettere sempre una resistenza da 10k tra il pin pulsante e gnd (per mantenere il pin allo stato LOW).

Code: [Select]
#define LED 13                // LED collegato al pin digitale 13 
#define BUTTON 7              // pin di input dove è collegato il pulsante 
int val = 0;                  // si userà val per conservare lo stato del pin di input 
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso 
byte i=0;

void setup() { 
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output 
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input 


void loop() { 
  val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva 

  // controlla se è accaduto qualcosa 
  if ((val == HIGH)){ 
    stato = 1; 
    delay(15);                // attesa di 15 millisecondi 
  }   

  if (stato == 1) { 
    digitalWrite(LED, HIGH);  // accende il LED 
    delay(500);              // aspetta un secondo 
    digitalWrite(LED, LOW);   // spegne il LED 
    delay(500); // aspetta un secondo
    i+=1;  //incremento i
    if(i==30){stato=0;i=0;} // dopo 30 cicli on-off smette di lampeggiare || azzero i
  }               
}

Giobe

Grazie per l'aiuto.
Sono alle prime armi, avevo capito che la chiave era nella variabile i, ma non riuscivo a trovare la soluzone. Per fortuna ci siete voi che date un'aiuto.
Gio

tuxduino

Mi sembra ci siano un paio di imprecisioni:

delay(500);              // aspetta un secondo 

Il commento è sbagliato. Quello è 1/2 secondo ;)


Quando il pulsante viene premuto e lo stato va a zero, devi azzerare i, altrimenti se un precedente lampeggio arriva, per esempio, a 10 e poi viene interrotto perché si preme il pulsante, alla successiva pressione del pulsante il lampeggio riprende ma durerà solo 20 volte.

Scusate se piglio e mi intrometto, riuppando questa discussione ma e' l' unica che ci si avvicina che sono riuscito a trovare sul web...

A me servirebbe, a mo di deterrente, far accendere, con un circuitino, magari semplicissimo,  ogni 30 secondi circa, un led, o una lampada a 12v,  che metterei dentro alla scatola di un vecchio antifurto, da mettere come deterrente sul balcone della mia camera da letto simulando  per l' appunto un antifurto in funzione.

Grazie anticipatamente se qualcuno puo' rispondermi, magari linkandomi qualcosa a riguardo e scusatemi se mi sono permesso di chiedere in questo modo

leo72

Ciao e benvenuto.
Ti invito a leggere il regolamento del forum. E' buona creanza usare il 1° post per presentarsi e non per fare una richiesta  ;)

Detto questo, prendi lo sketch in oggetto e modificalo togliendo la parte relativa alla pressione del pulsante ed usando un secondo controllo basato su millis per cui ogni 30 secondi alterni la variabile di stato e fai il lampeggio del led solo se la variabile di stato è true

steve-cr

Salve.
Il blink è uno dei primi passi da cui si comincia a capire cosa fare con Arduino, dove però io ho capito una cosa:
- se uso delay, il ritardo non è fine a se stesso su quel particolare input oppure output, ma è un delay ASSOLUTO che, per far lampeggiare un led, mi BLOCCA virtualmente un programma per( x) secondi prima di proseguire.

E questo non va bene: in contemporanea io devo fare altre migliaia di cose: leggere input, assegnare output, fare conteggi: non posso aspettare dei secondi per riprendere l'esecuzione del programma, giusto?

Più semplicemente, se uso il classico programma blink contenuto in File>Esempi>Basic ma, contemporaneamente, voglio un led sul 12 che lampeggi ON 200ms e OFF 500 ms, come faccio???

Saluti

Brunello

File>Esempi>Digital>BlinkWithoutDelay

Go Up