granteeric

structure pb

Nov 15th, 2020
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define NBRMAXMENU 5
  2. #define TAILLE_BUFFER_MENU 20
  3. //declaration de la structure
  4. typedef struct {
  5.   uint8_t niveauMenu;
  6.   uint8_t positionMenu;
  7.   uint8_t niveauParent;
  8.   uint8_t niveauEnfant;
  9.   const char* description;
  10. } STR_MENUDEF;
  11.  
  12. const char TXT_PREDEFINI[] PROGMEM = "Predefini";
  13. const char TXT_MANUEL[] PROGMEM = "Manuel";
  14. const char TXT_QUITTER[] PROGMEM = "Quitter";
  15.  
  16. const STR_MENUDEF _m1 PROGMEM = {1,1,1,2,TXT_PREDEFINI};
  17. const STR_MENUDEF _m2 PROGMEM = {1,2,1,27,TXT_MANUEL};
  18. const STR_MENUDEF _m3 PROGMEM = {1,3,1,0,TXT_QUITTER};
  19.  
  20. const STR_MENUDEF tabMenuStruct[] PROGMEM = { _m1, _m2,_m3 };
  21.  
  22. int8_t tabMenuIndex[NBRMAXMENU];
  23.  
  24. void initTabMenuIndex(){
  25.   for(uint8_t i = 0 ; i < sizeof(tabMenuIndex); i++){
  26.     tabMenuIndex[i]=-1;
  27.   }
  28. }
  29.  
  30. void getIndexMenu(uint8_t niveau){
  31.   uint8_t tabIndex=0;
  32.   initTabMenuIndex();
  33.  
  34.   for(int i = 0 ; i < (sizeof(tabMenuStruct) / sizeof(tabMenuStruct[0])) ; i++){
  35.        int niveauMenu;
  36.        niveauMenu = pgm_read_byte((&(tabMenuStruct[i]).niveauMenu)) ;
  37.        
  38.     if(  niveauMenu == niveau){
  39.       if(tabIndex < NBRMAXMENU ){
  40.         tabMenuIndex[tabIndex]=i;
  41.         tabIndex++;
  42.       }
  43.     }
  44.   }
  45. }
  46.  
  47. void getMenu(uint8_t indexMenu, STR_MENUDEF *p_menu){
  48.   p_menu->niveauMenu = (uint8_t) pgm_read_byte((&(tabMenuStruct[indexMenu]).niveauMenu)) ;
  49.   p_menu->positionMenu = pgm_read_byte((&(tabMenuStruct[indexMenu]).positionMenu)) ;
  50.   p_menu->niveauParent = pgm_read_byte((&(tabMenuStruct[indexMenu]).niveauParent)) ;
  51.   p_menu->niveauEnfant = pgm_read_byte((&(tabMenuStruct[indexMenu]).niveauEnfant)) ;
  52.   char description[TAILLE_BUFFER_MENU];
  53.   strcpy_P(description, (char*)pgm_read_word(&(tabMenuStruct[indexMenu].description)));
  54.   p_menu->description =  description;
  55. }
  56.  
  57. void test1(){
  58. STR_MENUDEF str_menu ={0,0,0,0,""};
  59. getMenu(1,&str_menu);
  60.         Serial.println(F( " ----- TEST 1 -------  " ));
  61.         Serial.print(F( " str_menu.niveauMenu  " ));
  62.         Serial.println( str_menu.niveauMenu  );
  63.         Serial.print(F( " str_menu.positionMenu  " ));
  64.         Serial.println( str_menu.positionMenu  );
  65.         Serial.print(F( " str_menu.niveauParent  " ));
  66.         Serial.println( str_menu.niveauParent  );
  67.         Serial.print(F( " str_menu.niveauEnfant  " ));
  68.         Serial.println( str_menu.niveauEnfant  );
  69.         Serial.print(F( " str_menu.description  " ));
  70.         Serial.println( str_menu.description  );
  71.  
  72. }
  73.  
  74. void test2(){
  75.  Serial.println(F( " ----- TEST 2 -------  " ));
  76.  getIndexMenu(1);
  77.  
  78.   for(uint8_t i =0 ; i < sizeof(tabMenuIndex) ; i++){
  79.     if(tabMenuIndex[i] >= 0 ){
  80.         Serial.print(F( " tabMenuIndex[i]  " ));
  81.         Serial.println( tabMenuIndex[i]  );
  82.  
  83.         STR_MENUDEF str_menu ={0,0,0,0,""};
  84.         getMenu(tabMenuIndex[i],&str_menu);
  85.         Serial.print(F( " str_menu.niveauMenu  " ));
  86.         Serial.println( str_menu.niveauMenu  );
  87.         Serial.print(F( " str_menu.positionMenu  " ));
  88.         Serial.println( str_menu.positionMenu  );
  89.         Serial.print(F( " str_menu.niveauParent  " ));
  90.         Serial.println( str_menu.niveauParent  );
  91.         Serial.print(F( " str_menu.niveauEnfant  " ));
  92.         Serial.println( str_menu.niveauEnfant  );
  93.         Serial.print(F( " str_menu.description  " ));
  94.         Serial.println( str_menu.description  );
  95.     }
  96.   }
  97.  
  98. }
  99.  
  100. void setup() {
  101.   // put your setup code here, to run once:
  102. Serial.begin(9600);
  103. //test1();
  104. test2();
  105.  
  106. }
  107.  
  108. void loop() {
  109.   // put your main code here, to run repeatedly:
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment