code erreur condition IF ou et avec laser et LDR

Bonjour afin de renforcer la sécurité de ma porte de garage pour mes petits enfants j’ai fait un petit dispositif qui enclenche un relais et le contact du relais libre de potentiel agit sur la porte uniquement lorsqu’elle descend.
le problème que lorsque les contactes des bornes 4 ou 5 sont au niv bas la led donc le relais s’enclenche et se déclenche quand même alors qu’il ne devrait rien se passer. Quelqu’un a une idée pour moi, voici le code:

//déclaration des pins

int photocellPin = A1;// cellule LDR recevant la lumière du laser si celui-ci n'est pas couper par une présence.
int photocell2Pin = A2;// cellule LDR qui prend la lumière lorsque le moteur est enclenché pas encore opérationel dans ce montage
int photocellReading;
int ledpin = 11;//ici c'est une led mais qui sera remplacée par le contact du relais
int descenteporte = 4;//ici fin de course fermé uniquement si la porte descend
int fincours = 5;//ici fin de course fermé uniquement si la porte descend
int lazerpin = 6;//alimentation laser

void setup(void)
//déclaration des entrées sorties
{
  Serial.begin(9600);
  pinMode (11, OUTPUT);
  pinMode (4, INPUT);
  pinMode (5, INPUT);
  pinMode (6, OUTPUT);
  digitalWrite(lazerpin, HIGH);
  digitalWrite(ledpin, LOW);
}

void loop(void){
  photocellReading = analogRead(photocellPin);
  if (digitalRead(4) == LOW | digitalRead(5)== LOW)// si fin de course sont au niveau bas rien à faire
  {
    Serial.println("porte_Arretee");
    digitalWrite(ledpin, LOW);// led remplace relais donc relais déclenché
  }
  
  
  else if (digitalRead(4) == HIGH && digitalRead(5)== HIGH)//si les 2 fins de courses sont au niveau haut la porte descend
  {
    
    delay(100);
    if (photocellReading >= 1000)//seuil attribué à la valeur que renvoie la LDR, ici laser non interrompu donc personne n'est détecté
    {
    Serial.println(photocellReading);
    Serial.println("personne");
    digitalWrite(ledpin, LOW);
    }
    
    if (photocellReading < 800)// ici cette valeur est rencontrée si la ser interrompu
    {
    Serial.println("Quelqu'un");
    digitalWrite(ledpin, HIGH);//le relais s'enclenche et arrrête la porte.
    }
  }
  
  
  photocellReading = 1023 - photocellReading;
  delay(100);
}

Tu n'as pas posté au bon endroit, demande au modérateur de déplacer ton message (bouton idoine en dessous de ton post)

Sujet déplacé....

Il y a un | au lieu d’un || dans un test

Bonjour,

Comme le dit lesept le ou logique c'est || et non | (ou binaire), mais ici ce n'est pas le problème ici car dans le cas présent les deux donnent le même résultat.

Est-ce que les entrées ont bien une résistance de pullup? Si ce n'est pas le cas tu peux utiliser INPUT_PULLUP pour activer le pullup interne.

  photocellReading = 1023 - photocellReading;Ne sert à rien en fin de loop().
Est ce que tu ne voulais pas faire plutot

  photocellReading = analogRead(photocellPin);
  photocellReading = 1023 - photocellReading;

Remarque: utiliser des variables pour définir des entrées/sorties c'est bien (mais ce serait mieux avec des const), mais ensuite utiliser les numéros d'entrées/sorties c'est quand même très moyen.