Bonsoir à tous,
Je souhaiterais stopper l'exécution d'un programme lorsque celui-ci arrive dans un certain case au niveau du switch.
La partie du programme à modifier serait la suivante:
Je demande au programme de lire le clavier. (Fonction rdKb())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 KeyBd = rdKB(); // lecture du clavier if(KeyBd==0xfbff) { StopMotor(); Exit(0); return(0); }
Ensuite, si la touche appyuée correspond au bouton d'arret d'urgence(keybd==0xfbff), je lui indique de stopper le moteur (en l'occurence une pompe de jardin).
Ca marche à peu pres au détail près: lquand on appuie sur le bouton stop d'urgence, a pompe s'arrête et dès que l'on retire le doigt du bouton, elle se met en reset et se remet en marche toute seule. J'aimerais que lorqu'on appuie sur le bouton stop la pompe s'arrete et quand on retire le doigt du bouton, la pompr reste eteinte. Si quelqu'un à une idée...merci de me la faire partager.
je vous aie mis un morceau plus important de code:
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 case CONTACTS: switch(FSM_Contacts) { case 0: // temps d'exécution : 12µs //Lecture des contacts électriques toutes les 10ms if (Flag10ms == 1) { Flag10ms = 0; // rotation test if (ContactsSens == 1) ClkwsRotMotor(); else AntiClkwsRotMotor(); // start/stop test if (ContactsStop == 1) { // Stop case // restore context if mode isn't the Keyboard mode SpeedIndex = SpeedIndexSave; MOTORSTA &= ~MaskMode; if ((MOTORSTA_Save & MaskSens)==CLOCKWISE) ClkwsRotMotor(); else AntiClkwsRotMotor(); LcdUpdateFlag |= (LcdMaskMode + LcdMaskSpeed + LcdMaskSens); AtdSpeedCnt = 0; AtdData = 0xFF; FSM_KeyBoard = 0; StopMotor(); KeyBd = rdKB(); // lecture du clavier if(KeyBd==0xfbff) { StopMotor(); Exit(0); return(0); } } else // Start case { StartMotor(); FSM_KeyBoard = 0; } } FSM_Contacts ++; break;
Partager