Porte poulailler simple

Bonjour, Cela ne fait que 3 jours que j'ai un Arduino Uno avec un motor shield L293 donc niveau BABY

Je viens de programmer quelque chose qui fonctionne +-
Par contre, j'aimerais que la sécurité anti coincement remonte la porte mais que dés que le contacteur de fin de course est activer, arrête le programme de remonter.

Par exemple a 4 secondes de descende, la porte rencontre un obstacle, fait remonter la porte de 3 secondes. Mais si l'obstacle est a 2 secondes, et dés la porte active le fin de course haut , ne continue pas le delay.

Si le code peut être améliorer, pouvez-vous m'expliquer votre changement svp

#include <AFMotor.h>
AF_DCMotor motor(1); // create motor #1
int Int1; int Int2;
int BP1; int BP2; int BP3;
int sp = 200;

void setup() {
  Int1 = A0;
  Int2 = A1;
  BP1 = A3;
  BP2 = A4;
  BP3 = A5;
    
  pinMode(Int1,INPUT_PULLUP);
  pinMode(Int2,INPUT_PULLUP);
  pinMode(BP1,INPUT_PULLUP);
  pinMode(BP2,INPUT_PULLUP);
  pinMode(BP3,INPUT_PULLUP);
  
  Serial.begin(9600);           // set up Serial library at 9600 bps
  Serial.println("Motor test!");
  motor.setSpeed(sp);     // set the speed to 200/255
  motor.run(RELEASE);
delay(1500);
}
 
void loop() {


        
boolean IntH=digitalRead(Int1);
boolean IntB=digitalRead(Int2);
boolean BPP1=digitalRead(BP1);
boolean BPP2=digitalRead(BP2);
boolean BPsec=digitalRead(BP3);

// Commande moteur
if (IntH == 0 and BPP1 == 1) { // Monter si BPP1 fin de course pas atteint
    Serial.print("Avant ");
  motor.run(FORWARD);

  }
  else if (IntB == 0 and BPP2 == 1){ 

    if (BPsec == 0 and BPP2 == 1) { // Si coince
  Serial.print("Aiiiiiiieeeeeeeee ");
   motor.run(FORWARD); // Remonte 5sec
  delay(3000); 
     motor.run(RELEASE); // stop
    delay(10000);     
    }

  Serial.print("Arriere "); // Descend si BPP2 fin de course pas atteint
  motor.run(BACKWARD);

}
else {
  
  Serial.print ("Au repos ");

    motor.run(RELEASE);
    delay(500);
}
// Fin commande moteur
}

bonsoir

indenter le code correctement (ctrl-T dans la fenêtre d'arduino) permettrait de le rendre plus lisible

tu utilises delay() un peu partout dans ce code. Le problème de delay(), c'est que ça bloque le microcontrôleur pendant toute la durée du délai, du coup il ne peut pas réagir aux contacts de fin de course

il faudrait par exemple s'inspirer de cet exemple ou encore celui-ci pour se passer de delay()

ensuite ce type de projet se prète bien à la programmation par machine à états, voir ce très bon tuto sur la question

Merci beaucoup je me met à la lecture