Loading...
Pages: [1]   Go Down
Author Topic: Led lampeggiante per 30 secondi  (Read 755 times)
0 Members and 1 Guest are viewing this topic.
Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 27
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

Torino
Offline Offline
God Member
*****
Karma: 2
Posts: 732
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: 172
Posts: 16128
+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: 27
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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 172
Posts: 16128
+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: 2
Posts: 732
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: 27
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok proveró.
Logged

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 27
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

Offline Offline
Full Member
***
Karma: 0
Posts: 112
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: 27
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

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

Pages: [1]   Go Up
Print
 
Jump to: