Problema micro switch + stepper

Buongiorno a tutti,

Ho un problema con i micro switch.. Ho creato uno sketch che muove uno stepper via bluetooth. Quando invio "H" lo stepper fa un piccolo giro in senso orario, se invio "L" invece si muove in senso antiorario.

Vorrei che lo stepper si fermasse quando il microswitch viene premuto, ma il problema è che sembra non lo riconosca.

Ho creato una variabile "buttonState" che quando è high dovrebbe accendere un led e impedire allo stepper di leggere il messaggio bluetooth e quindi di muoversi.

Il problema è che lo stepper si muove lo stesso anche se il pulsante è premuto.. mentre il led si accende invece regolarmente.
Lo stepper rare volte si ferma ma il 95% delle volte se invio i messaggi si muove comunque.

Come dovrei fare per fermarlo quando il micro switch è premuto? STo sbagliando o non ho considerato qualcosa?

Questo è il codice che sto utilizzando:

#include <SoftwareSerial.h>

#define IN1  8
#define IN2  9
#define IN3  10
#define IN4  11
#define trigPin 7
#define echoPin 8

int rxPin = 3;
int txPin = 2;
SoftwareSerial bluetooth(rxPin, txPin);

String message;

int Steps = 0;
boolean Direction = true;// gre
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long timee;

const int buttonPin = 7;
int buttonState = 0;

void setup()
{
  Serial.begin(9600);
  bluetooth.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(IN1, OUTPUT); 
  pinMode(IN2, OUTPUT); 
  pinMode(IN3, OUTPUT); 
  pinMode(IN4, OUTPUT); 
  pinMode(buttonPin, INPUT);
  pinMode(13, OUTPUT);
// delay(1000);

}
void loop()
{
  
  buttonState = digitalRead(buttonPin);

  // accende il led se lo switch è premuto
  if(buttonState == 1) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }

  while (bluetooth.available()){
    // acquisisce il dato bluetooth
    message += char(bluetooth.read());
  }

  if(message!="") {
      // se il dato è "H" e lo switch non è premuto fa un piccolo giro
      if(message == "H" && buttonState != 1){
        steps_left=500;
        Steps = 1;
        
        while (steps_left>0 && Steps != 9 && buttonState != 1){
          Direction = 1;
          currentMillis = micros();
          if(currentMillis-last_time>=1000){
            stepper(1); 
            timee=timee+micros()-last_time;
            last_time=micros();
            steps_left--;
          
          }
         }
         Steps = 9;

  
}
      // se il dato è "L" e lo switch non è premuto fa un piccolo giro
      if(message == "L" && buttonState != 1){
        steps_left=500;
        Steps = 1;
        while (steps_left>0 && Steps != 9){
          Direction = 0;
          currentMillis = micros();
          if(currentMillis-last_time>=1000){
            stepper(1); 
            timee=timee+micros()-last_time;
            last_time=micros();
            steps_left--;
            
          }
         }
         Steps = 9;
  
    }
  }
  message = "";
  
  //Serial.println(buttonState);
}

void stepper(int xw){
  if(buttonState != 1) {
  for (int x=0;x<xw;x++){
    
    switch(Steps){
      case 0:
      if(buttonState != 1) {
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
      }
      break; 
      case 1:
      if(buttonState != 1) {
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, HIGH);
      }
      break; 
      case 2:
      if(buttonState != 1) {
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
      }
      break; 
      case 3:
      if(buttonState != 1) {
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
      }
      break; 
      case 4:
      if(buttonState != 1) {
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
      }
      break; 
      case 5:
      if(buttonState != 1) {
        digitalWrite(IN1, HIGH); 
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
      }
      break; 
      case 6:
      if(buttonState != 1) {
        digitalWrite(IN1, HIGH); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
      }
      break; 
      case 7:
      if(buttonState != 1) {
        digitalWrite(IN1, HIGH); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
      }
      break; 
      case 9:
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
      break; 
      default:
        digitalWrite(IN1, LOW); 
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
      break; 
    }
    }
    SetDirection();
  }
} 

void SetDirection(){
  
  if(Direction==1){ Steps++;}
  if(Direction==0){ Steps--; }
  if(Steps>7){
    Steps=0;
      }
  if(Steps<0){
    Steps=7;
}
}

Lo stepper rare volte si ferma ma il 95% delle volte se invio i messaggi si muove comunque.

Non ho "analizzato" bene il programma, ma la condizione !=1, dovrebbe impedire l'esecuzione della rotazione.

Potrebbe anche essere una questione di circuito, la resistenza resistenza pull down montata male,

Prova a stampare il valore del pulsante nel loop, e vedi se il pulsante ha valore sempre zero, quando non è premuto...

esempio:

void loop(){

    ....
    .....
    Serial.println(pulsante);
    delay(600);



}

Ho già provato a fare come dici tu, e la pressione del microswitch la sente correttamente, altrimenti non si accenderebbe neanche il led...

Una cosa strana che ho notato è che il programma funziona perfettamente con un normale switch button, mentre col microswitch ha questi problemi..