[RISOLTO] Bottone che funziona un numero di volte limitato

Ciao a tutti, sto sviluppando un progettino e devo far si che per 3 volte premendo il bottone A si accendi un LED, dopo queste 3 volte il bottone A non accenderà più il LED finché non viene premuto il bottone B, qual'è la strada migliore da seguire?

Una variabile e un if, quando accendi il led setti la variabile in modo che non faccia più eseguire nulla che non vuoi finché non viene premuto l'altro pulsante che resetta la variabile

grazie 1000, son riuscito! :slight_smile:

Bene, se puoi edita il primo post e metti risolto nel titolo così da aiutare gli altri nelle ricerche :slight_smile:

E magari posta anche il codice del tuo risultato, così puoi anche tu essere utile anche ad altri! :smiley:

docdoc:
E magari posta anche il codice del tuo risultato, così puoi anche tu essere utile anche ad altri! :smiley:

Scusate, avete ragione, ecco il codice:

if (digitalRead(buttonA) == LOW) {
    attuale = 1;
  }
  else {
    attuale = 0;
  }
  if (attuale != precedente) {
    if (attuale == 1) {
      counter = counter + 1;
      Serial.println(counter);
    }
  }
  precedente = attuale;

  if (digitalRead(buttonA) == LOW && counter  <3) {
  delay(1000);
    digitalWrite(eject, HIGH);
    delay(60);
    digitalWrite(eject, LOW);
    delay(1000);
    }

    if (digitalRead(buttonB) == LOW) {
      counter = 0;

paolinux78:
Scusate, avete ragione, ecco il codice:

Bene, grazie!

Però io sono per rendere il codice più “a blocchi” possibile, guarda questa versione del tuo spezzone di codice, e se vuoi prova ad usare spesso la suddivisione del loop() in funzioni che lo rende molto più leggibile, magari anche aggiungendo qualche commento in più (non so cosa tu abbia dopo “counter = 0” per cui te l’ho lasciato così):

...
void loop() 
{
  // Se il bottone A è premuto (solo le prime 3 volte), lampeggia il led
  if (CheckButtonA())
    Flash();
  // Se il bottone B è premuto, azzera il contatore per il bottone A
  if (digitalRead(buttonB) == LOW) {
    counter = 0;
...
// Restituisce true se è stato premuto il bottone A e bisogna accendere il led
bool CheckButtonA() {
  if ( counter < 3 ) {
    attuale = digitalRead(buttonA);
    if (attuale == LOW && precedente == HIGH) 
    { // Rampa da HIGH a LOW (logica inversa)
      ++counter;
      Serial.println(counter);
      return true;
    }
    precedente = attuale;
  }
  return false;
}

// Accendo il led per il tempo necessario
void Flash() {
  delay(1000);  // Ma serve veramente attendere 1 secondo?
  digitalWrite(eject, HIGH);
  delay(60);    // Resta acceso solo 60 millisecondi??
  digitalWrite(eject, LOW);
  delay(1000);
}