Go Down

Topic: Accendere led per 50 millisecondi con pressione pulsante (Read 585 times) previous topic - next topic

gianlu81

Ciao a tutti. E' tutto il pomeriggio che provo ma non riesco a venirne a capo.Il programma in questione dovrebbe,dopo la pressione del pulsante,accendere un led per 50 millisecondi. Il mio problema è il seguente:se mantengo premuto il pulsante il led rimane acceso.In pratica a me servirebbe un'impulso di 50 ms anche se il pulsante rimane premuto. Spero di essermi spiegato di seguito posto il file sorgente.
Code: [Select]
                 
int up = 8;
int down = 7;
int attup = 13;
int attdown = 12;
int pausa = 50;
int su = 0;
int giu = 0;

void setup() {
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT );
  pinMode(up,    INPUT);
  pinMode(down, INPUT);
  }
 
void loop() {
 
  su = digitalRead(up);
  giu = digitalRead(down);
  if (su == HIGH) {
  digitalWrite(attup, HIGH);
  delay (pausa);
  digitalWrite(attup, LOW );
  }
  else {
  digitalWrite(attup, LOW);
  }
  if (giu == HIGH) {
  digitalWrite(attdown, HIGH);
  delay (pausa);
  digitalWrite(attdown, LOW ); 
  }
  else {
  digitalWrite(attdown, LOW);
  }
  }


Grazie anticipatamente a chi vorrà spiegarmi dov'è l'errore e indicarmi la soluzione.

leo72

Metti un ciclo while che attende finché il pulsante non viene rilasciato subito dopo l'attivazione del led.
Code: [Select]

if (su == HIGH) {
  digitalWrite(attup, HIGH);
  delay (pausa);
  digitalWrite(attup, LOW );
  while (digitalRead(up)) {}
}

In questo modo il ciclo si ripete finché la lettura è HIGH ed esce solo quando hai tolto il dito.

gianlu81

Grazie per la risposta veloce e per la spiegazione

Go Up