verrouillage du miroir d'un reflex numérique, comment sortir de la boucle

bonjour à tous, je m’appel stéphane, je suis encore un novice de 41 ans qui cherche de l’aide.
je travaille sur un projet de photos d’insectes en vol.
afin de gratter quelques centièmes de seconde sur le déclenchement j’utilise le verrouillage du miroir.
actuellement la partie “else” fonctionne bien, mais tourne en boucle. Le “if” me se fait jamais.
j’ai détaillé le problème dans les commentaires du code.
si une bonne âme à une idée
merci à vous.

/*
*allumer led sur pin 10 lorque le sensor detecte quelque chose
*et bascule le relais en pin 3
*switch on led in pin 10 when sensor detect sth
*switch the relay on pin 10 for shooting

*/

int ledPin = 10; // LED connected to digital pin 10
int Relay = 3; // relay connected to digital pin 3
const int InfraredSensorPin = 4;//Connect the signal pin to the digital pin 4

void setup() {

pinMode(ledPin, OUTPUT); // initialize the digital pin as an output:
pinMode(Relay, OUTPUT); //Set Pin3 as output
pinMode(InfraredSensorPin,INPUT); // initialize the digital pin as an input:
digitalWrite(ledPin, LOW); // led on pin 10 switch off start
}

void loop()
{
if(digitalRead(InfraredSensorPin) == LOW)
// déclechement lorsqu’un objet passe
// detect smth condition

{
digitalWrite(ledPin,HIGH);
digitalWrite(Relay,HIGH);
// déclechement
// shooting
delay(50);
// l’appareil photo à besoin d’un minimum de temps pour reconnaitre un signal de déclecnchement
// dlsr need some ‘time’ to start shooting action
}

else
// le probleme commence ici, il faut lancer un signal de déclenchement pour lever le miroir, et relancer l’action toute les 30 secondes.
// en effet le boitier ne peut maintenir le miroir que 30 secondes!
// je n’arrive pas à ‘briser’ le else, le progamme s’obstine à terminer le delay 30500, même si le capteur infrarouge detect quelquechose
// issue start here, to earn time for shooting, i use the top miror option on the DLSR, the camera can’t hold the miror more than 30 sec
//but if the senor detect smth the signal on pin 4 can’t break the ‘else loop’ and it want to finish de delay(30500)
{

digitalWrite(Relay,HIGH);
delay(50);
digitalWrite(Relay,LOW);
delay(30500);

}

}

Bonjour,
il n’y a pas de probleme, c’est tout a fait normal.
La fonction “delay” est une fonction bloquante.
Pendant les 30500 mS de ton “delay”, il ne peux rien se passer.
Le programme attend la fin du “delay”.
Je t’invite a aller lire ceci :

Il faut utiliser la fonction “millis”.
N’hesite pas a revenir si necessaire.
Jacques

Salut,

+1

Des infos en plus :

ça marche du feu de dieu merci à JMe87 et B@tto

la vidéo du résultat, le boitier arrive en fin de cycle de 30 sec et referme le miroir, 2 sec plus tard l'arduino relève le miroir. puis je déclenche, le miroir se relevant automatiquement.

http://youtu.be/9kfnsYpSzTo

et mon nouveau code, merci encore!

int ledPin = 10; // LED connected to digital pin 10 int Relay = 3; // relay connected to digital pin 3 const int InfraredSensorPin = 4; //Connect the signal pin to the digital pin 4

int RelayState = LOW; // état du relais unsigned long Depart; // declaration de la variable depart de type unsigned long void setup() {

pinMode(ledPin, OUTPUT); // initialize the digital pin as an output: pinMode(Relay, OUTPUT); //Set Pin3 as output pinMode(InfraredSensorPin,INPUT); // initialize the digital pin as an input: digitalWrite(ledPin, LOW); // led on pin 10 switch off start Depart = millis(); // Enregistrement de mon point de départ

}

void loop() { if(digitalRead(InfraredSensorPin) == LOW)

{ digitalWrite(Relay,HIGH); //déclenchement delay(100); //déclenchement digitalWrite(Relay,LOW); //déclenchement delay(300); //déclenchement digitalWrite(Relay,HIGH); //verrouillage du miroir delay(100); //verrouillage du miroir digitalWrite(Relay,LOW); //verrouillage du miroir delay(100); Depart=millis(); // nouvelle enregistrement du point de départ }

else { if((millis()-Depart)>=32000) { digitalWrite(Relay,HIGH); //verrouillage du miroir delay(300); digitalWrite(Relay,LOW); delay(300); Depart=millis(); // nouvelle enregistrement du point de départ }

} }