Pages: [1] 2   Go Down
Author Topic: Led lampeggiante per 30 secondi  (Read 3051 times)
0 Members and 1 Guest are viewing this topic.
Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Gio

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 .
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21938
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Gio

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21938
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink
Logged

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok proveró.
Logged

Gio

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

#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 ?

« Last Edit: November 25, 2012, 05:45:45 pm by Giobe » Logged

Gio

Offline Offline
Full Member
***
Karma: 0
Posts: 139
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
  }               
}
Logged

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Gio

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sembra ci siano un paio di imprecisioni:

delay(500);              // aspetta un secondo 

Il commento è sbagliato. Quello è 1/2 secondo smiley-wink


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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23123
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink

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
Logged


cremona
Offline Offline
Newbie
*
Karma: 1
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 80
Posts: 2176
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

File>Esempi>Digital>BlinkWithoutDelay
Logged

Pages: [1] 2   Go Up
Jump to: