Problème calibration Moteur Pas à pas en DMX avec Fin de course et Sécu

Bonjour, je me retrouve confronté à un souci dans ma fonction de calibration. Etant donné que le code excède le nombre caractères, voici uniquement la fonction, tant le problème proviens de la logique plutot que des librairies

Ce que j'attend de ce code :

Le moteur se lance direction CCW, s'arrête lorsqu'il trouve l'un des deux switch, et en fonction de celui sur lequel il est tombé, enregistre une valeur utilisée plus tard dans une fonction de recalibration, puis reviens sur ses pas jusqu'à sortir du switch, prends une marge de 10 pas, enregistre sa position dans une variable, puis fonce jusqu'au deuxième, puis ressort avec la même marge et enregistre la deuxième variable, puis la void loop fais son job

ce qui se passe : dès le départ, il démarre son premier while, mais lorsque je clique sur l'un des deux switch, rien ne se passe, mais si je clique sur les deux en même temps, le moteur s'arrête. Je pense que le problème vient du OR dans le premier while, mais je n'ai pas trouvé d'alternative.

Merci d'avance pour votre aide ^^

void starthoming() {                                                                      // Init Calibration between two Limit Switch
  int HomingFinish = 0;                                                                   // Init Var to disable Run Mode from Void Loop
  long initial_homing = 0;                                                                // Init Var for incremental relative position

    stepper.setSpeed(100);    
  while (digitalRead(Switch_a) or digitalRead(Switch_b)) {                                // Launch First Move to detect First Limit Switch
    initial_homing--;
    stepper.moveTo(initial_homing);
    stepper.runSpeed();
    delay(2); }                                                                             // Stop once a Limit switch Reach
    
    if (digitalRead(Switch_a)) {                                                           // Switch A is the first reached
    firstlimit = 1;                                                                        // Remember it for Future Automatic Recalibration
        delay (500);
        stepper.setSpeed(20);
      while (!digitalRead(Switch_a)) {                                                       
        initial_homing++;
        stepper.moveTo(initial_homing);
        stepper.runSpeed();
        delay(1); }
        
        initial_homing = initial_homing + SafeFromLimit;                                    // Get a safe limit from switch
        stepper.moveTo(initial_homing);
        stepper.runSpeedToPosition();
      delay (1000);
        TravelMin = stepper.currentPosition();                                               // Calibrate Switch A to First Limit
      delay (250);
          stepper.setSpeed(100);
        while (digitalRead(Switch_b)) {
          initial_homing++;
          stepper.moveTo(initial_homing);
          stepper.runSpeed();
          delay(1); }
          
        delay (500);
          stepper.setSpeed(20);
        while (!digitalRead(Switch_b)) {
          initial_homing--;
          stepper.moveTo(initial_homing);
          stepper.runSpeed();
        delay(1);
      }
      initial_homing = initial_homing - SafeFromLimit;                                    // Get a safe limit from switch
        stepper.moveTo(initial_homing);
        stepper.runSpeedToPosition();
      delay (1000);
      TravelMax = stepper.currentPosition();                                               // Calibrate Switch B to Second Limit
      HomingFinish = 1;

    }
    else if (digitalRead(Switch_b)) {                                                      // Switch B is the first reached
      firstlimit = 2;                                                                      // Remember it for Future Automatic Recalibration
      delay (500);
        stepper.setSpeed(20);
      while (!digitalRead(Switch_b)) {
        initial_homing++;
        stepper.moveTo(initial_homing);
        stepper.runSpeed();
       delay(1); }
      
        initial_homing = initial_homing + SafeFromLimit;                                    // Get a safe limit from switch
        stepper.moveTo(initial_homing);
        stepper.runSpeedToPosition();
      delay (1000);
        TravelMin = stepper.currentPosition();                                               // Calibrate Switch B to First Limit
      delay (250);
        stepper.setSpeed(100);
      while (digitalRead(Switch_a)) {
        initial_homing++;
        stepper.moveTo(initial_homing);
        stepper.runSpeed();
      delay(1); }
      delay (500);
        stepper.setSpeed(20);
      while (digitalRead(Switch_a)) {
        initial_homing--;
        stepper.moveTo(initial_homing);
        stepper.runSpeed();
        TravelMax = initial_homing;
      delay(1); }
      
      initial_homing = initial_homing - SafeFromLimit;                                    // Get a safe limit from switch
        stepper.moveTo(initial_homing);
        stepper.runSpeedToPosition();
      delay (1000);
        TravelMax = stepper.currentPosition();                                                 // Calibrate Switch A to Second Limit
      HomingFinish = 1;
    }
  
}

comment doit on comprendre

  while (digitalRead(Switch_a) or digitalRead(Switch_b)) {                                // Launch First Move to detect First Limit Switch

En français c'est "tant que A est HIGH ou B est HIGH alors faire ..."

==> vos switch sont en INPUT_PULLUP ? que veut dire HIGH pour le switch ?