CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Programmation bouton poussoir

jerepout
jerepout
Niveau 1
04 juin 2018 à 14:21:26

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)


  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;
  }
 
}
jerepout
jerepout
Niveau 1
04 juin 2018 à 14:50:10

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
..
5 ème appui-> on revient au mode 1

MrAnge
MrAnge
Niveau 10
04 juin 2018 à 18:39:49

je pense que tu dois avoir fait ton interruption sur l'état haut et non sur un front montant

normalement tu devrais avoir ton interruption qui ressemblerais a sa :
attachInterrupt(TaBroche, TaFonction, ETAT)

ETAT peut valoir :

LOW : Pour détecter un état bas
HIGH : Pour détecter un état haut
RISING : Pour détecter le passage d'un état bas à haut
FALLING : Pour détecter le passage d'un état haut à bas

Message édité le 04 juin 2018 à 18:40:20 par MrAnge
jerepout
jerepout
Niveau 1
05 juin 2018 à 11:29:01

Je n'ai pas ce type de fonction. Comment puis je la créer ?

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment