Go Down

Topic: menubackend library submenus (Read 4 times) previous topic - next topic

olikraus

ooooohhhhhhh

To my knowledge menubackend only supports character lcds via LiquidCrystal, so i assumed, that your display is a character display. I mean, as far as i know, menubackend will also not work with the Adafruit PCD8455 lib for graphics lcd. So far M2tklib is the only menu lib which supports graphics lcds. However, m2tklib does not support the Adafruit PCD8455 library. The reason is simple: There are a large number of graphics libs out there and I can not write interfaces to all of them. Instead: M2tklib supports U8glib, which supports your PCD8455 display. So, to use m2tklib (again: which is probably the only Arduino menu lib for graphics displays) you probably need to download and use u8glib (http://code.google.com/p/u8glib/) instead of the Adafruit PCD8455 library.
Other option is to write the interface for the Adafruit lib, but this is a little bit complicated and poorly documented.

After this, you have to modify setup() and loop() procedures of the examples:
Code: [Select]


// Arduino setup procedure (called only once)
void setup() {
  // Connect u8glib with m2tklib
  m2_SetU8g(u8g.getU8g(), m2_u8g_box_icon);

  // Assign u8g font to index 0
  m2.setFont(0, u8g_font_7x13);

  // Setup keys
  m2.setPin(M2_KEY_SELECT, uiKeySelectPin);
  m2.setPin(M2_KEY_NEXT, uiKeyDownPin);
}

// Arduino loop procedure
void loop() {
  m2.checkKey();
  if ( m2.handleKey() ) {
    u8g.firstPage(); 
    do {
      draw();
    } while( u8g.nextPage() );
  }
}


See also the tutorial here:
http://code.google.com/p/m2tklib/wiki/t02u8g

And the reference page for the u8glib binding for m2tklib:
http://code.google.com/p/m2tklib/wiki/u8gref

And finally, you need to choose a font for your display from here:
http://code.google.com/p/u8glib/wiki/fontsize

well... let me conclude this:

- you own a graphics display
- m2tklib supports graphics libs
- m2tklib does not support the specific Adafruit GFX lib
- m2tklib supports PCD8455 based displays via u8glib

Oliver 

a.mlw.walker

#11
Jul 17, 2012, 12:01 am Last Edit: Jul 17, 2012, 12:04 am by a.mlw.walker Reason: 1
Haha! Oliver you are monopolizing the graphic lcd/menu industry with your libraries!
OK so I am using the nokia 5510 display from sparkfun, and you say that your u8_glib library supports that, then I have no issue using your library if it will work with your menu system. I have used menuBackend with that adafruit library, so it does seem to support it - I was doing it like this:
Code: [Select]

void menuChangeEvent(MenuChangeEvent changed)
{
 char string[30];
 string[0] = '\0';
 strcat(string, ">");
 strcat(string, changed.to.getLeft()->getName());
 strcat(string, ">");
 strcat(string, changed.to.getName());
 display.clearDisplay();   // clears the screen and buffer
 display.setCursor(0,0);
 display.println(string);
 display.display();

}

However thats just for info... I thought there may have been an equivelent for your menu library, but not bothered to use yours, because yours supports using a sub menu system.
i already have u8_glib downloaded and in my set of libraries, so I will set up my lcd to work with u8_glib then and then try out your boy/girl example.
In terms of that then, if I take your girl/boy example and adjust it to your newest setup()/loop() functions then it should work for my lcd...?

To initialize the lcd with u8_glib, the only line I can see that is close is:
Code: [Select]

U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);                    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8

which seems like the right one, so i just change the pin numbers, use your setup/loop and bingo, I can see how your boy/girl example works... I'll get on with that then
Cheers
A

EDIT:
I notice you use .checkKey() to see if one of the two buttons has been pressed, can I use a potentiometer/rotary encoder to go up and down, rather than a button?

olikraus

#12
Jul 17, 2012, 12:20 am Last Edit: Jul 17, 2012, 12:26 am by olikraus Reason: 1
Quote

To initialize the lcd with u8_glib, the only line I can see that is close is:
Code:
Code: [Select]
U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);                    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8

which seems like the right one, so i just change the pin numbers, use your setup/loop and bingo, I can see how your boy/girl example works...

Yes, ... hopefully

Quote
I notice you use .checkKey() to see if one of the two buttons has been pressed, can I use a potentiometer/rotary encoder to go up and down, rather than a button?

checkKey() calls an event source, which could analyse digital pins or a rotary encoder. However, I have not yet written the event source for a rotary encoder, but i added an enhancement request on the m2tklib project.

Oliver

Edit: Ensure to use m2tklib for u8glib. Also delete any other version before installing m2tklib for u8glib.


dannix


Hi

to my research, the author of MenuBackend has not been aktive since 4 months. Another problem is, that there are several menu libs out there. Several weeks ago, i collected some of them:

Library Name:             LCDMenu2
Download:             http://arduino.cc/forum/index.php/topic,73816.0.html

Library Name:             LCDMenu
Download:             http://arduino.cc/forum/index.php/topic,96104.0.html

Library Name:             MenuBackend
Download:             http://wiring.uniandes.edu.co/source/trunk/wiring/firmware/libraries/MenuBackend/

Library Name:             LCDMenu
Download:             http://www.metalgecko.com/arduino/LCDMenu.zip (does not exist any more)

Library Name:             Arduino_LCD_Menu
Download:             https://github.com/DavidAndrews/Arduino_LCD_Menu

Library Name:             MENWIZ
Download:             https://github.com/brunialti/MENWIZ

Library Name:             phi_prompt
Download:             http://liudr.wordpress.com/libraries/phi_prompt/

Library Name:             MenuSample
Download:             http://sourceforge.net/projects/arduinowifly/files/MenuSample/

Library Name:             M2tklib
Download:             http://code.google.com/p/m2tklib/

Not too many Arduino users add displays. And only some of them decide to use a menu lib.
Of course i would suggest to use "m2tklib" (as author of the lib ;) )
"m2tklib" can call sub menues.

Oliver



Wish I had this before I started out with menubackend!

Anyway in case it's of use I have created a menu using menubackend, not without problems using menubackend getBefore() in fact all getX() option won't compile but I did create a menu like so:

CONFIGURE (0)
        CONFIG HEATER (1)
                   HEATER ON (2)
                   HEATER OFF (2)
                   HEATER DISABLE (2)
                   EXIT (2)
        EXIT (1)
EXIT (0)

My problem was telling it to MoveToLevel(0) when I wanted to reset the position in the menu but it resets the board so I wrote a while loop to work it's wya back testing each element for an up or left option, if left that's leaving a submenu if up cycling through the current menus options. I link the 1st to the last menu element to create a loop.

Link is: http://arduino.cc/forum/index.php/topic,113673.msg858072.html#msg858072


a.mlw.walker

#14
Jul 17, 2012, 08:53 pm Last Edit: Jul 17, 2012, 08:59 pm by a.mlw.walker Reason: 1
Oliver, does this line need replacing for u8_glib?
Code: [Select]

M2tk m2(&el_main_menu, m2_es_arduino, m2_eh_4bs, m2_gh_lc);

I have my program like this, and I downloaded the latest library for m2 with u8_glib, but I get an error
Code: [Select]

#include "M2tk.h"
#include "m2ghu8g.h"
#include "U8glib.h"
U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);                    // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
//Adafruit_PCD8544 display = Adafruit_PCD8544(52, 51, 50, 48, 49);

uint8_t uiKeySelectPin = 10;
uint8_t uiKeyNextPin = 9;

uint8_t girl_color = 0;
uint8_t boy_color = 0;
uint8_t man_color = 0;

M2_EXTERN_GRIDLIST(el_main_menu);
M2tk m2(&el_main_menu, m2_es_arduino, m2_eh_4bs, m2_gh_u8g_bf);

void fn_ok(m2_el_fnarg_p fnarg) {
  /* color changed, do something */
 
  /* then jump back to the main menu */
  m2.setRoot(&el_main_menu);
}

const char *fn_idx_to_color(uint8_t idx)
{
  switch(idx)
  {
    case 0: return "brown";
    case 1: return "blonde";
    case 2: return "red";
  }
  return "";
}

/* boy submenu */
M2_LABEL(el_label1, NULL, "Boy:");
M2_COMBO(el_combo1, NULL, &boy_color, 3, fn_idx_to_color);
M2_BUTTON(el_ok1, NULL, " ok ", fn_ok);
M2_LIST(list1) = {
    &el_label1, &el_combo1,
    &el_ok1
};
M2_GRIDLIST(el_grid1, "c2",list1);

/* girl submenu */
M2_LABEL(el_label2, NULL, "Girl:");
M2_COMBO(el_combo2, NULL, &girl_color, 3, fn_idx_to_color);
M2_BUTTON(el_ok2, NULL, " ok ", fn_ok);
M2_LIST(list2) = {
    &el_label2, &el_combo2,
    &el_ok2
};
M2_GRIDLIST(el_grid2, "c2",list2);

/* man submenu */
M2_LABEL(el_label3, NULL, "Man:");
M2_COMBO(el_combo3, NULL, &man_color, 3, fn_idx_to_color);
M2_BUTTON(el_ok3, NULL, " ok ", fn_ok);
M2_LIST(list3) = {
    &el_label3, &el_combo3,
    &el_ok3
};
M2_GRIDLIST(el_grid3, "c2",list3);

/* main menu */
M2_ROOT(el_boy_button, NULL, "Boy", &el_grid1);
M2_ROOT(el_girl_button, NULL, "Girl", &el_grid2);
M2_ROOT(el_man_button, NULL, "Man", &el_grid3);
M2_LIST(list_main_menu) = {
    &el_boy_button, 
    &el_girl_button,   
    &el_man_button, 
};
M2_GRIDLIST(el_main_menu, "c1",list_main_menu);

// Arduino setup procedure (called only once)
void setup() {
  // Connect u8glib with m2tklib
  m2_SetU8g(u8g.getU8g(), m2_u8g_box_icon);

  // Assign u8g font to index 0
  m2.setFont(0, u8g_font_7x13);

  // Setup keys
  m2.setPin(M2_KEY_SELECT, uiKeySelectPin);
  m2.setPin(M2_KEY_NEXT, uiKeyDownPin);
}

// Arduino loop procedure
void loop() {
  m2.checkKey();
  if ( m2.handleKey() ) {
    u8g.firstPage(); 
    do {
      draw();
    } while( u8g.nextPage() );
  }
}


sketch_jul17a.cpp:2:21: error: m2ghu8g.h: No such file or directory
sketch_jul17a:14: error: 'm2_gh_u8g_bf' was not declared in this scope
sketch_jul17a.cpp: In function 'void setup()':
sketch_jul17a:78: error: 'm2_u8g_box_icon' was not declared in this scope
sketch_jul17a:78: error: 'm2_SetU8g' was not declared in this scope
sketch_jul17a:85: error: 'uiKeyDownPin' was not declared in this scope
sketch_jul17a.cpp: In function 'void loop()':
sketch_jul17a:94: error: 'draw' was not declared in this scope

i.e i dont think it can find the libraries?

Go Up