Bonjour à tous,
j'ai un problème quand à la détection d'un bouton dans un menu LCD.
J'ai résolu bcp de problèmes pour le moment et j'ai besoin de votre aide.
Avant de commencer je vais vous mettre le code du programme qui fonctionne nikel pour le moment
Le but étant d'avoir un menu : si appuie du bouton menu -> on swich de menu, ce qui fonctionne nikel pour le moment.Code:// LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections char txt1[] = "OPEN - FIRE"; char txt2[] = "MSTK CORPORATION"; char txt3[] = "MODE ON"; char txt4[] = "MODE OFF"; char txt5[] = "MODE TIMING"; char txt6[] = "Allume"; char txt7[] = "Eteind"; char txt8[] = "Temporise"; char txt9[] = "Arret"; char txt10[]= "Tourne"; char txt11[]= "OK -> demarrer"; char txt12[]= "OK -> arreter"; char txt13[]= "moteur -> STOP"; char menu_principal = 1; char nb_total_menu = 4; char menu_OK = 0; char oldstate_menu = 0; char oldstate_ok = 0; void main() { ANSELA = 0; ANSELB = 0; ANSELD = 0; // SET AN IND as difital TRISD0_bit = 0; // set RD0 pin as input Lcd_Init(); // Initialize LCD Sound_Init(&PORTE, 2); // Initialize Sound Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,4,txt1); // Write text in first row Lcd_Out(2,1,txt2); // Write text in second row Delay_ms(3000); Lcd_Cmd(_LCD_CLEAR); do { // DETECTION DU BOUTON MENU /******************************************************************************/ if (Button(&PORTD, 0, 1, 1)) // Detect logical one oldstate_menu = 1; // Update flag if (oldstate_menu == 1 && Button(&PORTD, 0, 1, 0)) { // Detect one-to-zero transition menu_principal += 1; if (menu_principal == nb_total_menu) menu_principal = 1; oldstate_menu = 0; // Update flag Lcd_Cmd(_LCD_CLEAR); } /******************************************************************************/ // DETECTION DU BOUTON OK /******************************************************************************/ /******************************************************************************/ //Menu principal /******************************************************************************/ switch(menu_principal) { case 1 : // mode OFF Lcd_Out(1,5,txt4); // MODE OFF Lcd_Out(2,3,txt12); // OK pour arreter break; case 2 : Lcd_Out(1,6,txt3); // MODE ON Lcd_Out(2,2,txt11); // OK pour arreter break; case 3 : Lcd_Out(1,4,txt5); // MODE Timing Lcd_Out(2,2,txt11); // OK pour arreter break; } /******************************************************************************/ } while(1); } // fin du programme
Dpuis 3 jours je voudrais entrer dans le menu 1, soit le menu OFF.
En appuyant sur le bouton correspondant à la pin D2 (exemple) en étant dans le menu 1, je voudrais afficher un mot (salut, bonjour...etc), simplement un test, mais ça ne marche pas!
J'ai vérifié les niveaux logique sur la pin, lorsque j'appuie sur le BP la pin D2 (tjs l'exemple) se met à 1 et 0 lors du relâchement...
Ce code à été fait avec mikroC for pic.
J'ai d'abord été dans le case "menu_principal = 1, dire ceci :
Mais c'est seulement en relâchant le bouton pin D2 que je vois apparaitre le mot "salut". Ensuite, le tecte "OK-> arreter" qui était là précédement reapparait...Code:case 1 : // mode OFF Lcd_Out(1,5,txt4); // MODE OFF Lcd_Out(2,3,txt12); // OK pour arreter /*Détection du bouton Pin D2*/ if (Button(&PORTD, 2, 1, 1)) // Detect logical one oldstate_ok = 1; // Update flag if (oldstate_ok == 1 && Button(&PORTD, 2, 1, 0)) { oldstate_ok = 0; // Update flag Lcd_Cmd(_LCD_CLEAR); Lcd_Out(2,3,"salut"); } break;
Je sens que je suis sur la bonne voie, mais je suis un peu coincer...pouvez-vous m'éclairer?
Si vous savez me donner des idées ça m'intéresserait.
Je vous remercie.
-----