Jean-François:
Artouste:
je pense qu'il est préférable d'utiliser la LDR en trigger (0 ou 1)Je fais ça avec les interruptions ?
Ou est ce que c'est coté hardware que ça se joue ?
Bonjour
en entrée hard devant une pin digitale je mettrais un truc comme ça (reglage du niveau logique sur occultation)
http://cjoint.com/12fe/BBlmiCe0nxU_ldrard3.jpg (j'ai mis 100K à la louche)
je conserverais l'interruption pour le 1PPS issue de la Bdt
et dans la boucle principale, je vérifierais si il y a occultation (1 vers 0) pour incrémenter un compteur, attention à bien prendre en compte les transitions entre occultation et non occultation.
Compte tenu de la durée de boucle qui sera courte par rapport à la durée d'occultation, il ne faut faire un +1 qu’après réarmement (detection de la transition de 0 vers 1 après un 1 vers 0 )
Bout de code pondu rapidement pour les transitions, testé , semble fonctionnel (utilisation de millis() pour simuler le 1PPS interruption)
/*
Turns on and off a light emitting diode(LED) connected to digital
pin 13, when LDR is trigerred on Pin 2.
*/
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
int Fill=true; // flag etat precedent , true pour etat illuminé
word Cpt=0; //compteur d'occultation
unsigned long time;
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
Serial.begin(115200);
}
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
//-----------------------------------
if (Fill== true) { // si etat precedent = illuminé
if (buttonState == false) // si etat lu = non illuminé = occultation
{
Cpt=Cpt + 1; // increment du compteur d'occultation
Fill=false; // flag mis à non illuminé (occulté)
}
}
Fill= buttonState; // flag mis à l'etat lu sur pin ldr
if (millis() -time > 1000) {
Serial.println(Cpt, DEC);
time=millis();
Cpt=0;
}
}
complément
http://cjoint.com/12fe/BBlqfDtF9zi_ldr04a.jpg
testé sur paillasse rapide avec
- un 47K pour adapter le niveau de trigger
- le sketch exemple de base (022) digital --> button
à l'oscillo sur la led (13) après calage "potard" ça détecte même le 50Hz de ma lampe fluo 8)