Bonjour,
Merci à tous les deux.
Après avoir débuté cette conversation, je suis en effet tombé sur ton topic achess qui m'a paru tout à fait en accord avec ce que je voulais faire.
Mais en effet, la partie mise en veille me paraissait compliquée.
Le compteur existait dans l'idée de laisser un laps de temps aux poules pour rentrer quand la luminosité est faible, et d'éviter que la trappe se ferme quand il y a un gros nuage noir qui passe.
Mon blocage principal réside dans la sortie de veille qui permet à l'arduino de comprendre qu'on est à un seuil et qu'il faut rester éveiller le temps de l'action (ouverture ou fermeture) : où dois-je mettre la fonction powerDownWakePeriodic ?
Il est peut-être intéressant que je vous livre "mon" code (des guillemets car j'ai bien pioché dans ce que j'ai trouvé ici et là !)
#include <simpleBouton.h>
const uint8_t pin_bouton = 4;
const int ENB = 7;
const int IN3 = 5;
const int IN4 = 6;
const int pinVal = A2;
int buttonState;
int buttonState2;
//int buttonState3;
int compteur = 500;
int jour;
simpleBouton bouton(2); //fin de course 1
simpleBouton bouton2(3); //fin de course 2
simpleBouton bouton3(pin_bouton); //ouverture manuel
int led = 9; //permet de vérifier la fermeture de la porte depuis la maison
void setup() {
Serial.begin(115200);
// put your setup code here, to run once:
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(led,OUTPUT);
digitalWrite(ENB, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
jour= 1; // on initialise l'arduino le jour
}
void loop() {
delay(1000);
int valeur = analogRead(pinVal);
buttonState = digitalRead(2);
buttonState2 = digitalRead(3);
//buttonState3 = digitalRead(4);
//----------sortie sur le serial pour vérification---------
Serial.print("resistance : ");
Serial.println(valeur);
Serial.print("compteur : ");
Serial.println(compteur);
Serial.print("jour : ");
Serial.println(jour);
if (buttonState == 0)
{
Serial.println("Capteur haut: ferme");
digitalWrite(led, HIGH);
//jour = LOW;
}
else
{
Serial.println("Capteur haut: ouvert");
digitalWrite(led, LOW);
}
if (buttonState2 == 0)
{
Serial.println("Capteur bas: ferme");
//jour=HIGH;
}
else
{
Serial.println("Capteur bas: ouvert");
}
Serial.println("");
//---------------------------------------------
//-----fin de course et bouton "manuel"---------
bouton.actualiser();
bouton2.actualiser();
bouton3.actualiser();
if (bouton.vientDEtreEnfonce())
{
actionAssociee();
}
if (bouton2.vientDEtreEnfonce())
{
actionAssociee();
}
if (bouton3.vientDEtreEnfonce())
{
Serial.println("test");
}
//------------------------------------------
if (jour==HIGH) //SI c'est le jour
{
if (valeur<75) //150si la valeur de la photorésistance est petite
{
compteur=compteur-1; //le compteur diminue
}
else
{
compteur=500;
}
if (compteur<495) //5si le compteur est inférieur à un seuil
{
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
analogWrite(ENB, 255); //150
jour=LOW;
compteur=500;
}
}
// 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>75)
{
compteur=compteur+1;
}
else
{
compteur=500;
}
if (compteur>505) //600
{
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255); //150
jour=1;
compteur = 500;
}
if (bouton3.vientDEtreEnfonce()) //S'il fait encore nuit le matin j'ouvre la porte manuellement
{
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 150);
jour = 1;
compteur = 2000; //2000
}
}
}
void actionAssociee()
{
analogWrite(ENB, 0);
}
Il y a de l'optimisation à faire, j'en suis conscient. Je compte rajouter l'extinction du L298 avec le MOSFET un de ces quatre (mais pareil, comment faire ça avec l'arduino en veille ?)
Re re merci.