Problema di Debounce

Ciao :slight_smile:
Ho appena finito di fare questo programma, il problema che una terminato, quando ho voluto provare a fargli fare più giri mi dà problemi di Debounce, come potete vedere sono riuscita a risolvere questo problema(con un deelay) fino a quando si trattava di stepsPerRevolution=800, ma a 3200 niente da fare non riesce... Mi potreste aiutare? consigli?

#include <Stepper.h>




int botton = 7;

const int stepsPerRevolution=3200;
Stepper myStepper(stepsPerRevolution,9,10,11,12);
int x;
int lettura;
void setup(){
  myStepper.setSpeed(10);
    Serial.begin(9600);
    x=1;
  
 
}
void loop()
{
lettura=digitalRead(botton);

if (lettura == HIGH){
 
 delay  (1000);
{x=-x;
  myStepper.step(x*stepsPerRevolution);

}
}
}

Grazie in anticipo a tutti :))

... hai due strade, una è fare un debounce hardware (... strada consigliata, guarda gli schemi allegati), l'altra e di farlo software, ma ... non come hai fatto tu ...

Supponiamo che il bottone sia normalmente LOW (... come mi sembra di capire nel tuo caso), quindi dobbiamo verificare che sia veramente HIGH anche dopo tutti i vari rimbalzi:

if (digitalRead(button) == HIGH) {
 delay(30);  // aspetta i vari rimbalzi e verifica di nuovo ...
 if (digitalRead(button) == HIGH) {
   ...
   ... qui dentro se veramente il bottone è premuto ...
   ....
 }
}

Guglielmo

debouncing_hw.pdf (22.8 KB)