Problema con la detención de un motor

Hola, quisiera saber si alguien pudiera ayudarme con un problema con un proyecto, el proyecto consiste en abrir o cerrar una ventana en función de la presencia o no de lluvia (con un sensor FC-37), la señal analógica debería cumplir dos condiciones u acciones el abrir o cerrar, y lo hace, el problema es que debería detenerse al momento que la ventana toca con unos microswitchs y no lo hace, probe de varias formas pero simplemente no se detiene, al variar la resistencia del sensor sí logra cambiar la polaridad haciendo que abra y cierre, pero no se detiene.

int rain = A0;
int IN3 = 5;    // Input3 conectada al pin 5
int IN4 = 4;    // Input4 conectada al pin 4 
int ENB = 3;    // ENB conectada al pin 3 de Arduino
// valor de acción
int thresholdValue = 800;
int ms = 2;
int ms2 = 13;
int p1;
int p2;

void setup(){
  pinMode(rain, INPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENB, OUTPUT);
   pinMode(ms, INPUT);
pinMode(ms2, INPUT);
  
  Serial.begin(9600);
}

void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(rain);
  Serial.print(sensorValue);
  p1=digitalRead(ms);
p2=digitalRead(ms2);
  if(sensorValue <= thresholdValue){
do{
   
analogWrite(ENB,205);
   digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);}
      while ((p1== LOW) or (p2 == LOW));
      
      
   }
  
  else {
    Serial.println(" - It's dry");
   analogWrite(ENB,205);
   digitalWrite (IN3, LOW);
  digitalWrite (IN4, HIGH);
  }

}

Creo que es lógico aunque no te hayas dado cuenta:

    do{
      analogWrite(ENB,205);
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
    } while ((p1== LOW) or (p2 == LOW));

¿Cuándo puede cambiar el estado de p1 o p2 en este bucle y "romperlo", si no los actualizas?

Versión rápida del bucle:

    do{
      analogWrite(ENB,205);
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
    } while ((digitalRead(ms)) or (digitalRead(ms2)));

O mejor aún, para no reescribir una y otra vez IN3, IN4 y ENB, los sacaría fuera del bucle:

      analogWrite(ENB,205);
      digitalWrite (IN3, HIGH);
      digitalWrite (IN4, LOW);
    do{ // no hago nada más que esperar a que ms o ms2 estén en high.
    } while ((digitalRead(ms)) or (digitalRead(ms2)));