Bonsoir à tous
Je dit petite énigme car je suis convaincu qu'elle ne résistera pas à la pertinence de certains d'entre vous.
Contexte un ATtiny85 pilote un émetteur Infrarouge (IR) dont le faisceau est détecté par un récepteur
raccordé à la broche 2 d'un Arduino Uno.
La trame, telle que visible sur l'image ci-dessous montre un bit de Start de 100ms suivit de 6 bits de 20 ms
chacun séparé par un LOW de 20ms.
Le programme ci-dessous est volontairement simplifié pour mes test, particulièrement la fonction ISR
void DecodeIR2() {
Serial.println(millis());
}
Le tableau excel suivant liste dans
la première colonne contient le résultat du Serial.println(millis());
la seconde est le calcul de la période correspondante
Vous pouvez constater que l'instruction Serial.println(millis()); semble être exécutée deux fois consécutivement.
Merci de votre aide
Amicalement Roland
// déclaration de constantes
const int InputIR = 2;
const int ledPin12 = 12;
volatile unsigned long TimeIR2 = 0;
volatile unsigned long TimeIR2mem = 0;
volatile unsigned long CptIR2 = 0;
int IRState = 0; // variable pour la lecture IR2
void setup() {
Serial.begin(500000);
Serial.println("Prog OK");
// initialisation de la broche 2 en Input
// pinMode(InputIR, INPUT);
// initialisation de la broche 12 en Output
pinMode(ledPin12, OUTPUT);
attachInterrupt(0, DecodeIR2, RISING);
}
void loop() {
// copie de l'entrée IR dans la sortie 12
// IRState = digitalRead(InputIR);
// digitalWrite(ledPin12, IRState);
}
void DecodeIR2() {
Serial.println(millis());
}