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

incrémenter un menu



  1. #1
    invite9865321

    incrémenter un menu


    ------

    Bonjour,

    je voudrait passer d'un menu à un autre à l'aide d'un µP.
    Cependant, je ne sais pas pourquoi ça foire!

    Voici le code en C :

    Code:
    /**************************************************************/
    	if (bp_menu == 1)
    	 {
        	position_menu ++;
    		if (position_menu == nombre_total_menu + 1)
    		 {
    		  position_menu = 1;
    		 }
    
    		while (bp_menu==1) 
    		 {
    		  bp_menu = PINC & mask_menu;			
    		 }
    	 }
    /**************************************************************/
    Pour ce qui est du code, on à ça

    Code:
       switch(position_menu)
       {
         case 1 : 
    	           lcd_clrscr();
     			   lcd_home();
    			   lcd_puts(" MODE MOTEUR OFF ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("  OK = stopper  ");
    			   break;
    
    	case 2 :  
    	  	       lcd_clrscr();
     			   lcd_home();
    			   lcd_gotoxy(0,0);
    			   lcd_puts(" MODE MOTEUR ON ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("OK = actionner");
    			   break;
    
    	case 3 :
    	  	       lcd_clrscr();
     			   lcd_home();
    			   lcd_puts("  MODE  TIMING  ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("OK = choix tempo");
    			   break;
       }
    Le bouton est défini comme ceci:
    Code:
    DDRC = 0x00; //PORT C EN ENTREE
    #define mask_menu      0b00000001 
    unsigned char bp_menu = PORTC | mask_menu;

    Avez-vous une idée? Je n'arrive pas à passer du menu 1 à 2...
    Merci de votre aide

    -----

  2. #2
    freepicbasic

    Re : incrémenter un menu

    unsigned char bp_menu = PORTC | mask_menu;

    | c'est (OR )
    bp_menu est toujours = 1
    mettre un & (AND)
    unsigned char bp_menu = PORTC & mask_menu;
    A+, pat

  3. #3
    invite9865321

    Re : incrémenter un menu

    Bonjour,

    je viens de tester et ça ne change rien... Du moins le menu ne s'incrémente pas.
    Je viens de prendre les tension, j'ai bien 5V au repos sur la pin0 du port C et quand j'appuis j'ai bien 0V.

    Je ne vois pas pourquoi..

    Merci encore de votre aide

  4. #4
    freepicbasic

    Re : incrémenter un menu

    bp_menu = PINC & mask_menu;
    Est ce que cette ligne est aussi au début avant le test?
    if (bp_menu == 1)

    position_menu est il initialisé à 0 au début


    nombre_total_menu c'est combien ?



    Sinon ça fonctionnera jamais.
    A+, pat

  5. A voir en vidéo sur Futura
  6. #5
    invite9865321

    Re : incrémenter un menu

    Salut,

    alors voila position menu est initialisé à 1, il indique bien le menu désiré, c'est à dire le menu 1.

    Il y a 3 menu, ce qui fait que nombre_total_menu est = à 3.

    Est ce que cette ligne est aussi au début avant le test?
    if (bp_menu == 1)
    Heu, c'est le test ^^

    Sinon, le define est mis avant le main, donc oui, il est avant le test

  7. #6
    invite9865321

    Re : incrémenter un menu

    Voici le code général comme ça ça vous donne une idée.

    J'ai modifié quelque trucs : la pin 0 du port C du µC est mise au niveau haut en permanence et je veux que le menu change au niveau bas.

    Code:
     int main ()
    {
    
    	/***************************************************************************/
    	/****************************** REGISTRES **********************************/
    	/***************************************************************************/
    
    DDRC = 0x00; //PORT C EN ENTREE
    DDRB = 0xFF; //PORT B EN SORTIE
    
    	/***************************************************************************/
    	/******************************* VARIABLES *********************************/
        /***************************************************************************/
    
    unsigned char position_menu = 1,
    			  position_menu_max = nombre_total_menu;
    
    
    unsigned char valeur_time = quart_heure,
    			  valeur_time_max = temps_max;
    
    
    unsigned char bp_menu = PINC & mask_menu,
    			  bp_time = PINC & mask_time,
    			  bp_ok   = PINC & mask_ok,
    			  moteur  = PINB & mask_moteur;
    
    
    
    	//***************************************************************************
    	//*************************** INITIALISATION ********************************
    	//***************************************************************************
    
     lcd_init(LCD_DISP_ON);
     lcd_clrscr();
     lcd_home();
    
    	//***************************************************************************
    	//*************************** BOUCLE INFINIE ********************************
    	//***************************************************************************
    
     for(;;)
     {
    
    /**************************************************************/
    	if (bp_menu == 0  )
    	 {
    
        	position_menu ++;
    		if (position_menu == nombre_total_menu + 1)
    		{
    		  position_menu = 1;
    		}
    		 
    
    		while (bp_menu == 0) 
    		{
    		  bp_menu = PINC & mask_menu;	
    		 }		
    		 
    	 }
    /**************************************************************/
    
    
       switch(position_menu)
       {
         case 1 : 
    	           lcd_clrscr();
     			   lcd_home();
    			   lcd_puts(" MODE MOTEUR OFF ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("  OK = stopper  ");
    			   break;
    
    	case 2 :  
    	  	       lcd_clrscr();
     			   lcd_home();
    			   lcd_gotoxy(0,0);
    			   lcd_puts(" MODE MOTEUR ON ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("OK = actionner");
    			   break;
    
    	case 3 :
    	  	       lcd_clrscr();
     			   lcd_home();
    			   lcd_puts("  MODE  TIMING  ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("OK = choix tempo");
    			   break;
       }
    
    
    
    }
      return(1);
    /*FIN PROGRAMME*/
    
    }
    Voila, alors comme la pin 0 du port C est à 1 en permanece, j'ai voulu tester en mettant ceci :

    Code:
    	if (bp_menu == 1  )
    	 {
    
        	position_menu ++;
    		if (position_menu == nombre_total_menu + 1)
    		{
    		  position_menu = 1;
    		}
    		 
    
    		while (bp_menu == 1) 
    		{
    		  bp_menu = PINC & mask_menu;	
    		 }		
    		 
    	 }
    Et là le menu s'incrémente en permanence (très vite), je le visualise sur l'afficheur LCD

    Merci de votre aide

  8. #7
    Seb.26

    Re : incrémenter un menu

    Ton port est bien en 'input' ?

    Pourquoi utiliser ces variables :

    Code:
    unsigned char bp_menu = PINC & mask_menu,
    			  bp_time = PINC & mask_time,
    			  bp_ok   = PINC & mask_ok,
    			  moteur  = PINB & mask_moteur;
    fais juste une macro :
    Code:
    #define bp_menu PINC & mask_menu
    ou alors, mets à jour tes variable dans ta boucle...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. #8
    freepicbasic

    Re : incrémenter un menu

    Code:
    
    void My_Function(unsigned char );
    
    
     int main ()
    {
    
    	/***************************************************************************/
    	/****************************** REGISTRES **********************************/
    	/***************************************************************************/
    
    DDRC = 0x00; //PORT C EN ENTREE
    DDRB = 0xFF; //PORT B EN SORTIE
    
    	/***************************************************************************/
    	/******************************* VARIABLES *********************************/
        /***************************************************************************/
    
    unsigned char position_menu = 1,
    			  position_menu_max = nombre_total_menu;
    
    
    unsigned char valeur_time = quart_heure,
    			  valeur_time_max = temps_max;
    
    
    unsigned char bp_menu = PINC & mask_menu,
    			  bp_time = PINC & mask_time,
    			  bp_ok   = PINC & mask_ok,
    			  moteur  = PINB & mask_moteur;
    
    
    
    	//***************************************************************************
    	//*************************** INITIALISATION ********************************
    	//***************************************************************************
    
     lcd_init(LCD_DISP_ON);
     lcd_clrscr();
     lcd_home();
    
    	//***************************************************************************
    	//*************************** BOUCLE INFINIE ********************************
    	//***************************************************************************
    
    
    
    
     for(;;)
     {
    
            bp_time = PINC & mask_time;
    	bp_ok   = PINC & mask_ok;
    	moteur  = PINB & mask_moteur;
    
    
            bp_menu = PINC & mask_menu;
    
    /**************************************************************/
    	if (bp_menu == 0  )
    	 {
        	position_menu ++;
    		if (position_menu == nombre_total_menu + 1)	position_menu = 1;
    		while ( (PINC & mask_menu) == 0) ;
    		My_Function(position_menu)
    	 }
    /**************************************************************/
    
    	}
    }
    /*FIN PROGRAMME*/
    
    
    void My_Function(unsigned char position_menu)
    {
        lcd_clrscr();
    	lcd_home();
    	lcd_gotoxy(0,0);
    
       switch(position_menu)
       {
         case 1 : 
    			   lcd_puts(" MODE MOTEUR OFF ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("  OK = stopper  ");
    			   break;
    
    	case 2 :  
    			   lcd_puts(" MODE MOTEUR ON ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("OK = actionner");
    			   break;
    
    	case 3 :
    			   lcd_puts("  MODE  TIMING  ");
    			   lcd_gotoxy(0,1);
    			   lcd_puts("OK = choix tempo");
    			   break;
       }
    
    }
    A+, pat

  10. #9
    Gérard

    Re : incrémenter un menu

    Juste une question pour Pat :
    dans les "Case x", ne faut-il pas écrire Gotoxy 1,0 pour le renvoi à la 2e ligne ?

  11. #10
    freepicbasic

    Re : incrémenter un menu

    Citation Envoyé par Gérard Voir le message
    Juste une question pour Pat :
    dans les "Case x", ne faut-il pas écrire Gotoxy 1,0 pour le renvoi à la 2e ligne ?
    pour être sur il faut consulter la doc du langage utilisé mais en général on démarre de 0 , donc ça me semble correct , c'est pourquoi je n'ai pas relevé, mais encore une fois voir la "référence guide" du compilo.
    A+, pat

  12. #11
    invite9865321

    Smile Re : incrémenter un menu

    Le problème est réglé...pour l'appuis des bouttons, je ne vais plus voire la pin...mais les registres...et là ça fonctionne.

    Sinon lcd_gotoxy(0,1) revois à la deuxième ligne.
    Vous avez déjà eu un cours de math? L'axe des X c'est abscisse et y l'axe des ordonnées...donc si j'incrémente x je bouge suivant les abscisses (et donc je me déplace horizontalement).
    Si j'incrémente y je me déplace suivant l'axe des ordonnées (et donc horizontalement.)
    Le départ étant home() = lcd_gotoxy(0,0).
    Vous devez revoir votre géométrie les mecs...si vous avez du mal avec 2 axes, je suis en train de me dire "heureusement que c'est pas un afficheur 3D...

    Bien à vous

  13. #12
    Gérard

    Re : incrémenter un menu

    En math 0,0 est en bas à gauche.
    Sur un LCD, c'est en Haut à gauche.

    Conclusion : 1 ton plus bas avec tes remarques !

Discussions similaires

  1. Incrémenter un nombre à l'impression dans Word
    Par firechief dans le forum Logiciel - Software - Open Source
    Réponses: 23
    Dernier message: 24/07/2012, 17h15
  2. Probleme dtpicker+incrémenter un numero à la nouvelle feuille
    Par jimmy59940 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/04/2009, 08h03
  3. [Brun] menu timer
    Par cheti_lak dans le forum Dépannage
    Réponses: 3
    Dernier message: 20/11/2008, 12h15
  4. menu dvd
    Par raidensnake222 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 12/03/2005, 15h10
  5. Incrémenter une variable avec un PIC
    Par 14bds75_cb dans le forum Électronique
    Réponses: 1
    Dernier message: 24/06/2003, 13h05
Découvrez nos comparatifs produits sur l'informatique et les technologies.