Interactine menu probelem

hey everyone i built an inteactive menu and everything works fine exept that the last menu item is not showing anything (its getting in the option but shows a blank page) i noticed also that if i will add a menu item the one before will work like its a problem always with the last menu item.

#include "U8glib.h"
#include <U8glib.h>

U8GLIB_KS0108_128 u8g(45, 43, 41, 39, 37, 35, 33, 31, 47, 53, 51, 49, 0); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
#define KEY_NONE 0
#define KEY_PREV 1
#define KEY_NEXT 2
#define KEY_SELECT 3
#define KEY_BACK 4

// DOGS102 shield configuration values
//uint8_t uiKeyPrev = 2;
//uint8_t uiKeyNext = 4;
//uint8_t uiKeySelect = 5;
//uint8_t uiKeyBack = 3;

// DOGM128-Shield configuration values
// DOGXL60-Shield configuration values
uint8_t uiKeyPrev = 22;
uint8_t uiKeyNext = 24;
uint8_t uiKeySelect = 26;
uint8_t uiKeyBack = 28;

uint8_t uiKeyCodeFirst = KEY_NONE;
uint8_t uiKeyCodeSecond = KEY_NONE;
uint8_t uiKeyCode = KEY_NONE;

//VOLTAGE
float value1 = 0;
float value2 = 0;
float value3 = 0;
float value4 = 0;
float value5 = 0;

float EREZ1;
float EREZ2;
float EREZ3;
float EREZ4;
float EREZ5;

float R1 = 10000.0;
float R2 = 50000.0;

//temp

double dat;

void uiSetup(void) {
// configure input keys

pinMode(uiKeyPrev, 22); // set pin to input
digitalWrite(uiKeyPrev, HIGH); // turn on pullup resistors
pinMode(uiKeyNext, 24); // set pin to input
digitalWrite(uiKeyNext, HIGH); // turn on pullup resistors
pinMode(uiKeySelect, 26); // set pin to input
digitalWrite(uiKeySelect, HIGH); // turn on pullup resistors
pinMode(uiKeyBack, 28); // set pin to input
digitalWrite(uiKeyBack, HIGH); // turn on pullup resistors
}

void uiStep(void) {
uiKeyCodeSecond = uiKeyCodeFirst;
if ( digitalRead(uiKeyPrev) == LOW )
uiKeyCodeFirst = KEY_PREV;
else if ( digitalRead(uiKeyNext) == LOW )
uiKeyCodeFirst = KEY_NEXT;
else if ( digitalRead(uiKeySelect) == LOW )
uiKeyCodeFirst = KEY_SELECT;
else if ( digitalRead(uiKeyBack) == LOW )
uiKeyCodeFirst = KEY_BACK;
else
uiKeyCodeFirst = KEY_NONE;

if ( uiKeyCodeSecond == uiKeyCodeFirst )
uiKeyCode = uiKeyCodeFirst;
else
uiKeyCode = KEY_NONE;
}

#define MENU_ITEMS 6
char *menu_strings[MENU_ITEMS] = { " EREZ1", " EREZ2", " EREZ3", " EREZ4", " EREZ5"," TEMP", };

uint8_t menu_current = 0;
uint8_t menu_redraw_required = 0;
uint8_t last_key_code = KEY_NONE;
uint8_t menu_previous = 0;

void drawMenu(void) {
uint8_t i, h;
u8g_uint_t w, d;

u8g.setFont(u8g_font_6x13);
u8g.setFontRefHeightText();
u8g.setFontPosTop();

h = u8g.getFontAscent()-u8g.getFontDescent();
w = u8g.getWidth();
for( i = 0; i < MENU_ITEMS; i++ ) {
d = (w-u8g.getStrWidth(menu_strings[i]))/2;
u8g.setDefaultForegroundColor();
if ( i == menu_current ) {
u8g.drawBox(0, ih+1, w, h);
u8g.setDefaultBackgroundColor();
}
u8g.drawStr(d, i
h, menu_strings[i]);
}

}

void updateMenu(void) {
if ( uiKeyCode != KEY_NONE && last_key_code == uiKeyCode ) {
return;
}
last_key_code = uiKeyCode;

switch ( uiKeyCode ) {
case KEY_NEXT:
menu_current++;
if ( menu_current >= MENU_ITEMS )
menu_current = 0;
menu_redraw_required = 1;
break;
case KEY_PREV:
if ( menu_current == 0 )
menu_current = MENU_ITEMS;
menu_current--;
menu_redraw_required = 1;
break;
case KEY_SELECT:
//EREZ1
if (menu_current == 0 && digitalRead(uiKeySelect) == LOW) {
u8g.firstPage();
do {
u8g.setFont(u8g_font_6x10);
u8g.drawStr(80, 20, "EREZ1");
u8g.setPrintPos(5, 20);
u8g.print(EREZ1);
menu_previous = 0;

    } while (u8g.nextPage());
    
  }
  

  //EREZ2
  if (menu_current == 1 && digitalRead(uiKeySelect) == LOW) {
    u8g.firstPage();
    do {
      u8g.setFont(u8g_font_6x10);
      u8g.drawStr(80, 20, "EREZ2");
      u8g.setPrintPos(5, 20);
      u8g.print(EREZ2);
     menu_previous = 1;
     
     
    
    } while (u8g.nextPage());
    
  }

   //EREZ3
  if (menu_current == 2 && digitalRead(uiKeySelect) == LOW) {
    u8g.firstPage();
    do {
      u8g.setFont(u8g_font_6x10);
      u8g.drawStr(80, 20, "EREZ3");
      u8g.setPrintPos(5, 20);
      u8g.print(EREZ3);
       menu_previous = 2;
     
    
    } while (u8g.nextPage());
    
  }

   //EREZ4
  if (menu_current == 3 && digitalRead(uiKeySelect) == LOW) {
    u8g.firstPage();
    do {
      u8g.setFont(u8g_font_6x10);
      u8g.drawStr(80, 20, "EREZ4");
      u8g.setPrintPos(5, 20);
      u8g.print(EREZ4);
       menu_previous = 3;
    
    } while (u8g.nextPage());
    
  }

   //EREZ5
  if (menu_current == 4 && digitalRead(uiKeySelect) == LOW) {
    u8g.firstPage();
    do {
      u8g.setFont(u8g_font_6x10);
      u8g.drawStr(80, 20, "EREZ5");
      u8g.setPrintPos(5, 20);
      u8g.print(EREZ5);
       menu_previous = 4;

    
    } while (u8g.nextPage());
    
  }
  //TEMP
  else if (menu_current == 5 && digitalRead(uiKeySelect) == LOW) {
    u8g.firstPage();
    do {
      u8g.setFont(u8g_font_6x10);
      u8g.drawStr(80, 20, "EREZ5");
      //u8g.setFont(u8g_font_6x10);
      //u8g.drawStr(0, 0, "TEMP");
     // u8g.setPrintPos(0, 0);
      //u8g.print(dat);
      menu_previous = 5;
    } while (u8g.nextPage());
  }

 
  break;
  


case KEY_BACK:
  menu_current = menu_previous;
  menu_redraw_required = 1;
  break;

}
}

void setup() {

uiSetup(); // setup key detection and debounce algorithm
menu_redraw_required = 1; // force initial redraw
}

void loop() {

//erez1
value1 = analogRead(A0);
EREZ1 = value1 * (5.0 / 1024);//* ((R1 + R2) / R2);
u8g.println(EREZ1);

//erez2
value2 = analogRead(A1);
EREZ2 = value2 * (5.0 / 1024);//* ((R1 + R2) / R2);
u8g.println(EREZ2);

//erez3
value3 = analogRead(A2);
EREZ3 = value3 * (5.0 / 1024);//* ((R1 + R2) / R2);
u8g.println(EREZ3);

//erez4
value4 = analogRead(A3);
EREZ4 = value4 * (5.0 / 1024);//* ((R1 + R2) / R2);
u8g.println(EREZ4);

//erez5
value5 = analogRead(A4);
EREZ5 = value5 * (5.0 / 1024);//* ((R1 + R2) / R2);
u8g.println(EREZ5);

//temp

uint16_t val;
double dat;
val=analogRead(A5);//Connect LM35 on Analog 0
dat = (double) val * (5/10.24);
u8g.println(dat);

uiStep(); // check for key press

if ( menu_redraw_required != 0 ) {
u8g.firstPage();
do {
drawMenu();
} while( u8g.nextPage() );
menu_redraw_required = 0;

}

updateMenu(); // update menu bar

}

???
It looks like you intended to write:
pinMode(uiKeyPrev, INPUT); // set pin to input

Similar mistake for the other three INPUT pins.

Why the same string for "menu_current == 4" and "menu_current == 5"?

i have tried different string and still wont show anything

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.