Bonjour,
je programme depuis 1976 dans divers langages et sur divers microprocesseurs ou micro contrôleurs.
j'ai commencé avec les cartes ARDUINO il 5 ou 6 ans et je n'ai jamais pu exploiter les instructions "while" ou "do while" que se soit sur UNO, MEGA ou DUE,
via 5 versions d'IDE (la dernière 2.0.1) et 3 PC différents avec différents OS, VISTA, ..........., WINDOWS10.
j'ai bien sûr consulté les forums et bien que me conformant aux exemples, ça ne marche pas, ecxepté pour le DUE ou je rajoute une instruction d'un cycle (inTerrups()) avant la boucle, ce qui n'est pas très satisfaisant, à croire que l'addresse de retour de boucle est décalée d'un cycle.
un exemple type sur UNO:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 inTerrupts(); while(condition) { // do something }
On peut vérifier que le flag (boolean) b_timeout ainsi que la variable (unsigned int) timeout sont bien mis à jour en supprimant la boucle "while" et en validant le "if".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 void setup() { #include <arduino.h> // timeout = 15000; // b_timeout = false; interrupts(); } void loop() { timeout = 15000; b_timeout = false; while(!b_timeout) { cmpt++; } // if(b_timeout) // { noInterrupts(); // } } // interrupt routine basée sur un timer cadensé à 1ms // ******************************** // timer_interrupts // ******************************** ISR(TIMER1_COMPA_vect) { // 1ms // 1s if(tim_1s > 1) { tim_1s--; } else { b_1s = true; digitalWrite (LED_BUILTIN, !digitalRead(LED_BUILTIN)); tim_1s = 500; } // 15s if(timeout > 1) { timeout--; } else { b_timeout = true; } }
La LED clignotte 15 fois puis s'eteind avec le "if", clignotte indéfiniment avec le "while", boucle infinie.
Quelqun peut-il m'éclairer?
Grand merci d'avance
Partager