• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
kolejne menu dla arduino
#1
Po długim grzebaniu w sieci znalazłem kod "startowy" do zrobienia sobie nawigacji menu. Jako że nie jestem programistą chciałem poprzerabiać sobie kod aby uzyskać następującą strukturę:
Kod:
// ------------------- SCHEMAT NAWIGACJI MENU -------------------------------
MENU:
ZEGAR:         - > GODZINA     00:00        
                    KONIEC

TWARDOŚĆ KH:   - > 0 - 20     (do wyboru z zakresu)
                    KONIEC

LAMPA:         - > GODZINA START 00:00
                    GODZINA STOP  00:00
                    MANUAL:  (0-255) bezpośrednie rozjaśnianie i ściemnianie lampy
                    KONIEC

WIATRAK:       - > TEMPERATURA 20-30
                    HISTEREZA 0.0-1.0 (w kroku co 0.1)
                    KONIEC

WYJŚCIE  (z menu do panelu głównego)
sam kod był praktycznie bez komentarza więc nie mogę ogarnąć tematu co za co odpowiada i jak i gdzie go rozbudować. Pierwszy poziom (główny) generalnie się wyświetla i na początek jest OK.
Kod jest następujący:
Kod:
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X u8g(13, 12, 11);              // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17

#define KEY_NONE 0
#define KEY_PREV 1
#define KEY_NEXT 2
#define KEY_SELECT 3
#define KEY_BACK 4


uint8_t uiKeyPrev = 7;
uint8_t uiKeyNext = 8;
uint8_t uiKeySelect = 9;
uint8_t uiKeyBack = 4;

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


void uiSetup(void) {
 
 pinMode(uiKeyPrev, INPUT_PULLUP);               // ustawienie pinu pullup
 pinMode(uiKeyNext, INPUT_PULLUP);               // ustawienie pinu pullup
 pinMode(uiKeySelect, INPUT_PULLUP);             // ustawienie pinu pullup
 pinMode(uiKeyBack, INPUT_PULLUP);               // ustawienie pinu pullup
}

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 5
const char *menu_strings[MENU_ITEMS] = { "ZEGAR", "TWARDOSC HK", "LAMPA", "WIATRAK", "WYJSCIE" };

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


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, i*h+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;
 }
}


void setup() {
 // rotate screen, if required
 // u8g.setRot180();
 
 uiSetup();                                // setup key detection and debounce algorithm
 menu_redraw_required = 1;     // force initial redraw
}

void loop() {  

 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
 
}
Moje pytania:
- gdzie buduje się (i jak) dodawać kolejne pod poziomy MENU,
- jak zmienić podświetlanie linii  w zwykły wskaźnik  np:  ->,
- co i jak ustawić aby menu wyświetlało się w następujący sposób:
Kod:
MENU:
------------------------------------------
   ZEGAR
   TWARDOSC KH
->  LAMPA
   WIATRAK
   WYJSCIE

po wyborze pozycja np. LAMPA ekran:

LAMPA:
--------------------------------------
->  GODZINA START
   GODZINA STOP
   MANUAL
   KONIEC
 
Odpowiedź
  


Wiadomości w tym wątku
kolejne menu dla arduino - przez nebari - 13-03-2018, 21:21
RE: kolejne menu dla arduino - przez nebari - 14-03-2018, 20:28
RE: kolejne menu dla arduino - przez kaczakat - 16-03-2018, 06:18
RE: kolejne menu dla arduino - przez error105 - 16-03-2018, 10:35

Skocz do:


Przeglądający: 1 gości