Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Réaliser un bouton poussoir pour allumer une LED



  1. #1
    Iron-Sim

    Réaliser un bouton poussoir pour allumer une LED

    Bonjour,

    Je souhaiterais savoir si l'un de vous avait un programme pour allumer une LED avec un bouton poussoir sur un MSP430G2553 (je débute). Je voudrais qu'avec un appui, la LED s'allume et qu'avec un autre, elle s'éteigne, etc. comme un interrupteur en fait.

    J'ai tenté avec un if et un else if mais apparemment, cela ne fonctionne pas.

    Merci grandement pour votre aide.

    -----


  2. Publicité
  3. #2
    annjy

    Re : Réaliser un bouton poussoir pour allumer une LED

    Bonjour,

    dans l'esprit de ce forum, il vaudrait mieux que tu montres ce que tu as écrit, plutôt que de recopier une solution toute faite.

    on (pas forcément moi, ce n'est pas mon domaine favori) te dira alors pourquoi ça ne marche pas, et tu apprendras beaucoup plus.......

    cordialement,
    JY

  4. #3
    Iron-Sim

    Re : Réaliser un bouton poussoir pour allumer une LED

    Bonjour. Oui, désolé. Voilà ce sur quoi je suis parti.

    Je pense que ça bloque au niveau de ma seconde condition. mais je ne suis pas certain. Comme expliqué, je débute et j'essaie de comprendre par étape comment le langage C fonctionne.

    En effet, je suis un cursus de formation et nous devons réaliser un programme avec concrètement très peu d'information sur ce type de langage :s.

    Merci de votre aide.

    #include <MSP430G2553.h>

    void main(void)

    {
    P1DIR = 0x01; //Configure le port P1 (P1.0 en sortie)
    P1OUT = 0x00 // Configure la LED en P1.0 éteinte au démrrage

    while (1) //Boucle infinie
    {
    if ((P1IN & BIT3) == 0) { //Si le bouton P1.3 est enfoncé…
    P1OUT = 0x01; //…allumer la led verte
    } else

    if (((P1IN & BIT3) == 0) AND (P1OUT = 0x01){
    P1OUT = 0x00; // sinon et si le bouton P1.3 est enfoncé et la LED P1.0 est ouverte
    }
    }
    }

  5. #4
    Iron-Sim

    Re : Réaliser un bouton poussoir pour allumer une LED

    C'est bon, j'ai trouvé.

    Code:
    #include <msp430g2553.h>
    
     #define LED BIT6
     #define BUTTON BIT3
    
     void main(void)
     {
      WDTCTL = WDTPW|WDTHOLD;
      P1DIR = LED;
      P1REN = BUTTON;
      P1OUT = BUTTON;
    
      while(1){
      if((P1IN & BUTTON) == 0x00){
      __delay_cycles(5000);
      if((P1IN & BUTTON) == 0x00){
      P1OUT ^= LED;
      while((P1IN & BUTTON) == 0x00);
      }}}
     }
    Merci ^^

  6. #5
    PA5CAL

    Re : Réaliser un bouton poussoir pour allumer une LED

    Bonsoir

    • Dans ton programme :
    - la led est allumée dès que la condition du premier test est vraie ( (P1IN & BIT3)==0 ), même quand on appuie sur le bouton pour éteindre la led ;
    - lorsque la condition est fausse, les deux tests sont faux et il ne se passe rien.

    Le fonctionnement que tu souhaites réaliser est celui d'une bascule T (Toggle). Pour ce faire, il faut utiliser une mémoire (i.e. une variable) pour se rappeler de l'état précédent du bouton à chaque exécution de la boucle (cet état mémorisé doit être pris en compte dans les tests).

    • Un bouton-poussoir génère des rebonds quand on le manipule. Par conséquent, si l'on ne prévoit pas un système anti-rebonds qui élimine les oscillations de l'état d'entrée, le led clignotera rapidement et aléatoirement à chaque manipulation sans qu'on puisse garantir son état final.

    Le système anti-rebonds peut être réalisé de façon logicielle, par exemple en interdisant la prise en compte d'un nouveau changement d'état avant qu'un délai de quelques millisecondes ne se soit écoulé.
    Dernière modification par PA5CAL ; 31/05/2015 à 18h30.

  7. A voir en vidéo sur Futura
  8. #6
    Iron-Sim

    Re : Réaliser un bouton poussoir pour allumer une LED

    OK, et mon système anti-rebond, de ce fait, c'est généré par cela (__delay_cycles(5000) alors ?

    Je voudrais ajouter une tempo à l'allumage des LED par ce bouton.

    C'est à dire que si j'appuie à un temps T<1s la LED est verte et si mon T>2s, ma LED est rouge.

    Quand je relâche le bouton, la lumière désiré reste et quand je rappuie une fois, elle s'éteint et la boucle recommence.

    J'avais commencé à bidouiller ce morceau de programme, mais je ne sais pas si je pars dans le bon sens. Quelqu'un peut y regarder ?

    Code:
    #include <MSP430G2553.h>
    
    #define LED0 BIT0
    #define LED1 BIT6
    #define BUTTON BIT3
    
    
    
    int main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
    P1DIR |= (LED0 + LED1); // Set P1.0 to output direction
    // P1.3 must stay at input
    P1OUT &= ~(LED0 + LED1); // set P1.0 to 0 (LED OFF)
    P1IE |= BUTTON; // P1.3 interrupt enabled
    
    P1IFG &= ~BUTTON; // P1.3 IFG cleared
    
    __enable_interrupt(); // enable all interrupts
    for(;;)
    {}
    }
    
    
    // Port 1 interrupt service routine
    #pragma vector=PORT1_VECTOR
    __interrupt void Port_1(void)
    {
    	P1OUT = 0x40;                     // green light
    	   __delay_cycles(1000000);           // delay 3 seconds
    
    	    P1OUT = 0x00;                      //red light
    	    __delay_cycles(100000);           // delay 3 seconds
    
    	    P1OUT = 0x01;                      //red light
    	    __delay_cycles(1000000000);           // delay 3 seconds
    P1IFG &= BUTTON; // P1.3 IFG cleared
    P1IES ^= BUTTON; // toggle the interrupt edge,
    // the interrupt vector will be called
    // when P1.3 goes from HitoLow as well as
    // LowtoHigh
    }

  9. Publicité
  10. #7
    Iron-Sim

    Re : Réaliser un bouton poussoir pour allumer une LED

    Bonjour,

    J'ai tenté une nouvelle approche avec des "Si", je ne pense pas avoir besoin d'interruption pour ce type de séquence. Le seul hic, c'est que mon bouton ne lance pas la programme...

    Quelqu'un peut me filer un coup de main ?


    Code:
    #include <msp430g2553.h>
    
     #define GREEN_LED 0x40       		// Définit le terme "GREEN8LED" comme étant la sortie P1.6
     #define RED_LED 0x01       		// Définit le terme "GREEN8LED" comme étant la sortie P1.6
     #define LEDS 0x41       		// Définit le terme "GREEN8LED" comme étant la sortie P1.
     #define LEDS_ETEINT 0x00       		// Définit le terme "GREEN8LED" comme étant la sortie P1.
     #define BUTTON BIT3		  		// Définit le terme" BUTTON" comme étant l'entrée P1.3
     long tps;
    
    
     void main(void)			  		//Fonction principale lancée au reset
    
    
      {
      WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
      P1DIR = LEDS;		  		//Configure le port P1.6 en sortie
      P1REN = BUTTON;			  		//Permet une résistance de tirage sur P1.6 (fixe entrée numérique à un niveau haut)
      P1OUT = LEDS_ETEINT;			 		//Impose le niveau haut sur le bouton
    
      BCSCTL2 = SELS; // SMCLK = LFXT1CLK (quartz)
      TA0CTL = MC_1 + TASSEL_2 + TACLR; // Up_mode / SMCLK
      TA0CTL |= ID_2;
      CCTL0 = CCIE; // CCR0 interrupt enabled
     CCR0 = 32000;
      _BIS_SR(GIE); // Active les interruptions globales
    
      while (1) //Boucle infinie
      { if ((P1IN & BIT3) == 0x00) { //Si le bouton P1.3 est enfoncé…;
    		  	tps++; //…allumer la led verte
    	  }
    		  		if(tps <= 8192) {
    		  			P1OUT = 0x40 ;
    		  					}
    		  		else if (tps >= 16384) {
    		  			P1OUT = 0x01 ;
    		  					}
    }
    		  	}

  11. #8
    Iron-Sim

    Re : Réaliser un bouton poussoir pour allumer une LED

    Quelqu'un peut m'aider s'il vous plait ?

  12. #9
    Iron-Sim

    Re : Réaliser un bouton poussoir pour allumer une LED

    S'il vous plait ?

    Personne ne peut m'aider ?

Sur le même thème :

Discussions similaires

  1. Allumer led en appuyant Bouton Poussoir
    Par newtech1 dans le forum Électronique
    Réponses: 10
    Dernier message: 30/12/2014, 16h05
  2. mikroC probleme pour qu'un bouton poussoir allume une led
    Par Albert-cosmoff dans le forum Électronique
    Réponses: 9
    Dernier message: 08/02/2014, 11h05
  3. Montage pour bouton poussoir
    Par Archange427 dans le forum Électronique
    Réponses: 16
    Dernier message: 07/01/2012, 20h56
  4. allumer une LED lorsqu'on appuie sur un bouton poussoir
    Par kimou12 dans le forum Électronique
    Réponses: 11
    Dernier message: 08/02/2011, 17h45
  5. Bouton poussoir, Allumer et eteindre une led
    Par jojo86 dans le forum Électronique
    Réponses: 37
    Dernier message: 06/12/2008, 09h34