int val = 0; // variable pour mémoriser la valeur lue volatile float freq; volatile float monDelai ; volatile unsigned long firstPulseTime; volatile unsigned long lastPulseTime; volatile unsigned long numPulses =0; int del=200; // retard recherché en ms 200 => 2.5 ms void setup() { pinMode ( 2,INPUT); Serial.begin(74880); pinMode ( 4, OUTPUT); pinMode ( 5, OUTPUT); attachInterrupt(0, isr, RISING); // enable the interrupt } void isr() { // Retard technologique par multiples opérations sur monDelay float: monDelai = 1 ; while(monDelai < del) monDelai++ ; //del=100 pour 1.24ms environ, del =10000 pour 126 ms environ ++numPulses; } void loop() { attachInterrupt(0, isr, CHANGE); // enable the interrupt if (numPulses == 0) { firstPulseTime = micros(); } if (numPulses == 50 ) { lastPulseTime = micros(); freq = ((1000000UL * (numPulses - 1))/(lastPulseTime + (1550*numPulses) - firstPulseTime))/2; if (freq > 50) {digitalWrite(5,1); digitalWrite(4,0);} if (freq < 50) {digitalWrite(5,0);digitalWrite(4,1);} numPulses=0; } }