Porte poulailler avec capteur de lumière et interrupteur hall

Bonjour,

Je suis nouveau ici et je découvre toutes les possibilités de l'arduino, c'est assez fou.

Mon projet doit être assez simple et je suis presque au bout de mon proto mais je dois avoir une erreur dans mon code de programmation.

Le projet : créer une porte pour poulailler avec ouverture automatique qui se déclenche en fonction de la luminosité extérieur. Pour cela, j'utilise un arduino uno, un powersupply modul, un micro controler L293D, un relai, un moteur 9v, une photoresistance et un capteur magnetique ( detection de la position haute de la porte).
J'ai un problème au niveau de ma condition if, car une fois le moteur lancé, ça ne s’arrête plus ( que la lumière diminue ou que le capteur magnetique soit désactivé).
J'aimerai que le moteur s’arrête de tourné une fois que le capteur magnétique est déclenché.

int lightPin = 0;
int inputPin = 2;
#define ENABLE 5
#define DIRA 3
#define DIRB 4

byte leds = 0;
int val = 0 ;

void setup() {
  //---set pin direction
    pinMode(ENABLE,OUTPUT);
  pinMode(DIRA,OUTPUT);
  pinMode(DIRB,OUTPUT);
  pinMode(inputPin, INPUT) ;
  Serial.begin(9600); 
 
}

void loop() {
  val = digitalRead(inputPin) ;
  digitalWrite(ENABLE,HIGH); // enable on
  Serial.println(val);
  int reading  = analogRead(lightPin);
  int numLEDSLit = reading / 57;  //1023 / 9 / 2
 // Serial.print(numLEDSLit);
  if (numLEDSLit > 3 && val==LOW) {
    digitalWrite(DIRA,HIGH); //one way
    digitalWrite(DIRB,LOW);
    val==HIGH;
    }
  else{
  digitalWrite(ENABLE,LOW); // disable
}
}

Merci pour votre aide.

Bonsoir

le capteur magnetique est défini comment dans le sketch ? val ?

la valeur change bien ?

Serial.println(val);

et le test avec

 Serial.print(numLEDSLit);

était concluant ?

@+

Bonjour,

Effectivement val m'indique 0 ou 1 en fonction de si je passe un aimant ou pas.
et ma photoresistance varie bien en fonction de la lumière...

Merci de votre retour,
Cdlt,

Je suppose que pour éteindre ton moteur tu passes la pin enable à LOW et pour l'allumer à HIGH ?

Comme la loop s'exécute en boucle, après être arrivée à la fin, elle se relance. Donc, tu repasses enable à HIGH. Ça relance ton moteur.

Je pense qu'il faut ajouter, après le else, pour vraiment arrêter le moteur :

   digitalWrite(DIRA,LOW); 
   digitalWrite(DIRB,LOW);

Si tu veux des infos sur le fonctionnement d'un moteur avec la L293D regarde ici