Délai d'attente avec une photocell

Bonjour,

J’ai un programme qui vient actionner un servo suivant la luminosité de la photo-resistance (photocell)

J’aimerai par contre qu’il se passe un délai (1 minute par exemple)avant l’éxécution de la boucle quand il détecte que val est > 300

Après ce délai si val est toujours supérieur à 300 il exécute la boucle, sinon val reste < 30

J’ai essayé avec delay mais çà ne fonctionne pas.

Je vous explique un peu pourquoi je veux mettre ce délai.

Suivant la luminosité le servo vient appuyer sur le bouton de ma télécommande centrale pour l’ouverture et la fermeture de mes volets.

La cellule se trouve dans une pièce ou parfois il y a lieu d’allumer la lumière quelque instant.

Il fait noir les volets sont fermés, j’allume la lumière les volets se lèvent et c’est là que je voudrai mettre ce délai car la lumière ne reste pas allumée plus d’une minute. çà éviterai que les volets montent et descendent.

Merci

ci dessous mon code:

#include <Servo.h>;  //librairie pour le servo
Servo monServo;
int val = 0;
int sensorPin = 0;



void setup() {
  Serial.begin(9600);

}

void loop() {
  val = analogRead(sensorPin); /lecture de la valeur
  Serial.println(val); //ecriture de la valeur sur le moniteur série
  static bool var = false; //boucle 

  if ( val > 300 )
    if ( var == false ) // si la valeur est vrai
    {
      var = true;
      monServo.attach(3);
      monServo.write(100);
      delay(2000);
      monServo.write(120);
      delay(500);
      monServo.detach();
    }
  if ( val < 30 )

    if ( var == true ) // si la valeur est fausse
    {
      var = false;
      monServo.attach(3);
      monServo.write(180);
      delay(2000);
      monServo.write(125);
      delay(500);
      monServo.detach();

    }
}

essaies avec ça :

#include <Servo.h>;  //librairie pour le servo
Servo monServo;
int val = 0;
int sensorPin = 0;



void setup() {
  Serial.begin(9600);

}

void loop() {
  val = analogRead(sensorPin); // lecture de la valeur
  Serial.println(val); //ecriture de la valeur sur le moniteur série
  static bool var = false; //boucle

  if ( val > 300 )
    delay(60000); // 1 minute

  val = analogRead(sensorPin); // nouvelle lecture de la valeur

  if ( val > 300 )
    if ( var == false ) // si la valeur est vrai
    {
      var = true;
      monServo.attach(3);
      monServo.write(100);
      delay(2000);
      monServo.write(120);
      delay(500);
      monServo.detach();
    }
  if ( val < 30 )

    if ( var == true ) // si la valeur est fausse
    {
      var = false;
      monServo.attach(3);
      monServo.write(180);
      delay(2000);
      monServo.write(125);
      delay(500);
      monServo.detach();

    }
}

et éventuellement si ça foire avec ça :

#include <Servo.h>;  //librairie pour le servo
Servo monServo;
int val = 0;
int sensorPin = 0;



void setup() {
  Serial.begin(9600);

}

void loop() {
  val = analogRead(sensorPin); // lecture de la valeur
  Serial.println(val); //ecriture de la valeur sur le moniteur série
  static bool var = false; //boucle
  static bool delai = false;

  if ( (val > 300) && (delai == false) )
  {
    delay(60000); // 1 minute
    delai = true;
  }
  else
    delai = false;

  val = analogRead(sensorPin); // nouvelle lecture de la valeur

  if ( val > 300 )
    if ( var == false ) // si la valeur est vrai
    {
      var = true;
      monServo.attach(3);
      monServo.write(100);
      delay(2000);
      monServo.write(120);
      delay(500);
      monServo.detach();
    }
  if ( val < 30 )

    if ( var == true ) // si la valeur est fausse
    {
      var = false;
      monServo.attach(3);
      monServo.write(180);
      delay(2000);
      monServo.write(125);
      delay(500);
      monServo.detach();

    }
}

mais utiliser delay() c’est pas terrible, il vaudrait mieux utiliser millis(), voir l’exemple “blink without delay”.
de plus ce genre d’application se programmerait fort bien avec une petite machine à états. voir ici le tuto de jml
et éventuellement pour une application simplifiée, la librairie yasm

Un très grand merci, je vais tester demain et je vous tiendrai informé.

Je me documente également sur vos propositions.

Bonne soirée

Merci

Bonsoir,

J'ai testé et les deux solutions fonctionnent.

Vers quoi dois-je me diriger si en plus je ne veux pas que le programme s’exécute le samedi et le dimanche?

Merci

Utilise un module horloge comme le DS3231, fuis le DS1307 qui dérive dans le temps.

Merci, je vais donc commander un DS1307 et voir pour la suite.

Non, un DS3231.

Oui, autant pour moi.

Merci