Bonjour,
Je suis d'avance désolé de ma question, mais après 2 ou 3H de recherches et tests, comme je n'arrive à rien je me tourne vers vous.
C'est encore une histoire de trappe pour un poulailler, je leur ai fait un joli pont-levis. Le principe est le suivant :
une photorésistante capte la luminosité, si celle-ci est faible, un compteur décompte à partir de 200.
Si c'est un nuage qui est passé, la luminosité remonte et le compteur se réinitialise mais si c'est le crépuscule, alors le compteur atteint 5 et il faut fermer le pont-levis :
Le moteur se met en marche jusqu'à une butée, celle-ci atteinte, il doit s'arrêter. C'est là que le programme ne fonctionne pas.
J'utilise un moteur CC avec un pont en H L298N, des petits fin de course à galet et une carte arduino mega (je n'ai que ça sous la main).
Je teste l'état du fin de course avec un print, cela fonctionne, mais ma boucle n'arrête pas le moteur.
ça me paraissait tout simple à programmer, mais je n'ai pas l'effet escompté. Sûrement un problème dans les boucle if imbriquées.
Pourriez vous jeter un oeil SVP. Merci beaucoup par avance.
const int ENB = 6;
const int IN3 = 7;
const int IN4 = 8;
const int pinVal = A1;
int compteur = 200;
int jour;
const int unBouton = 2; //cpateur de fin de course
int etat;
void setup() {
Serial.begin(9600);
pinMode(unBouton,INPUT);
// put your setup code here, to run once:
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(3,OUTPUT);
digitalWrite(ENB, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
jour= HIGH; // on initialise l'arduino le jour
}
void loop() {
delay(1000);
etat = digitalRead(unBouton);
int valeur = analogRead(pinVal);
Serial.print("resistance : ");
Serial.println(valeur);
Serial.print("compteur : ");
Serial.println(compteur);
Serial.print("jour : ");
Serial.println(jour);
Serial.println(etat);
//delay(250);
if (jour==HIGH) //SI c'est le jour
{
if (valeur<100) //si la valeur de la photorésistance est petite
{
compteur=compteur-1; //le compteur diminue
}
else
{
compteur=200;
}
if (compteur<5) //si le compteur est inférieur à un seuil
{
if (etat == HIGH) //si la fin de course est ouverte
{
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
}
else is (etat == LOW) //butée atteinte on arrête le moteur
{
analogWrite(ENB, 0);
}
jour=LOW; // c'est maintenant la nuit
compteur =200; // réinitialistion du compteur
}
//delay(3000);
}
// On fera la même chose quand le jour se lève avec un compteur qui s'incrémente vers le haut
if (jour==LOW)
{
if (valeur>300)
{
compteur=compteur+1;
}
else
{
compteur=200;
}
if (compteur>205)
{
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
delay(3000);
analogWrite(ENB, 0);
jour=HIGH;
compteur =200;
}
}
//if (valeur >=400)
// {
// digitalWrite(IN3, HIGH);
// digitalWrite(IN4, LOW);
// analogWrite(ENB, 255);
// // delay(10000);
// analogWrite(ENB, 0);
// }
}
A bientôt