Bonjour à la communauté,

je suis bloqué depuis quelques heures sur un problème. En effet, je souhaite commander par microprocesseur, la vitesse d'un moteur et un temps de marche avec une LED et une couleur affecté par mode ( Ex LED rouge correspond à grande vitesse et 4 min en ON). Le choix des modes doit se faire par bouton poussoir. J'ai su gérer l'interruption mais j'ai deux soucis :

- Lors de l'appui sur le bouton poussoir, les 4 choix (indiqué par la couleur de la led) défilent trop vite, et je tombe au hasard sur une couleur lors du relachement. Le moteur se lance, et je dois attendre le temps.

-Le second problème découle du second, lorsqu'un mode est lancé, j'aimerai pouvoir après appui sur mon bouton changer de mode.

Je remercie beaucoup par avance ceux qui prendront le temps de m'aider. J'espère avoir été clair. Je vous mets le morceau de code correspondant à l'interruption ci dessous: ( StatoIn==0 correspond à une détection de l'appui bouton)

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
 
  if(StatoIn1==0){
 
        if(mode>4)mode=0;
      switch (mode){
        case 1:  
        for(d=0;d<20000;d++){ //20000 -> 1 secondes
        GPIO_WriteHigh(GPIOB,GPIO_PIN_1);
        GPIO_WriteHigh(GPIOC,GPIO_PIN_1);
      }
        GPIO_WriteLow(GPIOB,GPIO_PIN_1);
        GPIO_WriteLow(GPIOC,GPIO_PIN_1);
        break;
        case 2:
        for(d=0;d<20000;d++){ //20000 -> 1 secondes
        GPIO_WriteHigh(GPIOB,GPIO_PIN_2);
        GPIO_WriteHigh(GPIOC,GPIO_PIN_1);
                 }
        GPIO_WriteLow(GPIOB,GPIO_PIN_2);
        GPIO_WriteLow(GPIOC,GPIO_PIN_1);
        break;
        case 3:
        for(d=0;d<20000;d++){ //20000 -> 1 secondes
        GPIO_WriteHigh(GPIOB,GPIO_PIN_3);
        GPIO_WriteHigh(GPIOC,GPIO_PIN_1);
                 }
        GPIO_WriteLow(GPIOB,GPIO_PIN_3);
        GPIO_WriteLow(GPIOC,GPIO_PIN_1);
        break;
        case 4:
        for(d=0;d<20000;d++){ //20000 -> 1 secondes
        GPIO_WriteHigh(GPIOB,GPIO_PIN_1);
        GPIO_WriteHigh(GPIOB,GPIO_PIN_2);
    GPIO_WriteHigh(GPIOB,GPIO_PIN_3);
        GPIO_WriteHigh(GPIOC,GPIO_PIN_1);
                 }
        GPIO_WriteLow(GPIOB,GPIO_PIN_1);
        GPIO_WriteLow(GPIOB,GPIO_PIN_2);
        GPIO_WriteLow(GPIOB,GPIO_PIN_3);
        GPIO_WriteLow(GPIOC,GPIO_PIN_1);
        break;
 
        }//StatoIn1==1;
  }
 
}
Je travaille avec un stm8s003. StatoIn1 est une variable me permettant de détecter le front descendant et donc un appui sur le bouton poussoir.
Je souhaite faire cela :
1 appui -> mode 1 ( led verte moteur Nvitesse etc .)
2 appui -> mode 2
..
ème appui-> on revient au mode 1