Go Down

Topic: Menuefrage an Jomelo oder an jeden ;-) (Read 3055 times) previous topic - next topic

LC_Data

Hallo Gemeinde, speziell jedoch Jomelo,

für ein Intervall-Timer-Projekt möchte ich gerne eine Menuesteuerung aufbauen und habe mir Dein (wenn Du es geschrieben hast) Example angesehen und auch mit einem Bekannten der "nur" etwas C spricht, versucht zu analysieren und wir sind dabei über rudimentäre Erkenntnisse nicht hinaus gekommen.
Grundlegend unterscheidet sich die Art und Weise der Tastaturabfrage, da ich über einen analogen Eingang meine Tastatur realisiert habe (Widerstandsteiler mit entsprechender Abfrage)

Ich würden gerne die Example LCDMenu2 mit Variablen und Leben nach meiner (wenn auch nur kleinen Vorarbeit) bisher erstellten Tastaturabfrage füllen und anpassen.

Meine Tastaturabfrage sieht so aus:
Code: [Select]
void TastenLesen()
{
 unsigned char i;                                    //lokale Zählvariable
//Funktionsinterne Variablen
 taste = 0;

                                                   // Mittelwertbildung und Tastenfindung
 for (unsigned char i = 0;i< 8; i++)                 // for Schleife zum 8-fachen aufsummieren
 {                                          // des Tastaturwertes.
   taste = taste + analogRead(0);                    // Einlesen und Mittelwertbildung
 }                                          // durch mathem. Teilung durch
 taste = taste >> 3;                                // die Anzahl der Schleifendurchläufe >>3 = binär 8

 if (taste > 1020)                                   // Ab hier beginnt die Auswertung :
 {                                                   // Welche Taste wurde denn nun gedrückt ?
   tastegedr = 0;// keine Taste                      // Abgefragt werden die Spannungswerte
 }                                                   // die durch einen Spannungsteiler
 if (taste > 970 && taste < 976)//973                // an den analogen Eingang (Pin 0)
 {                                                   // geführt werden.
   tastegedr = 1;  // Set-Taste                      // Der Spannungswert wird durch verschiedene
 }                                                   // Widerstände an den Tasten variiert.
 if (taste > 894 && taste < 900)//897                // Je nach Analog-Wert bekommt die Variable
 {                                                   // tastegedr einen Wert von
   tastegedr = 2;  // Up-Taste                       // 0 = Keine Taste,
 }                                                   // 1 = Set oder Enter-Taste
 if (taste > 346 && taste < 352)//349                // 2 = Up-Taste
 {                                                   // 3 = Down-Taste
   tastegedr = 3; //Down-Taste                       // 4 = Links-Taste
 }                                                   // 5 = Rechts-Taste
 if (taste > 716 && taste < 722)//719
 {
   tastegedr = 4; // Links-Taste
 }
 if (taste > 936 && taste < 942)//939
 {
   tastegedr = 5; // Rechts-Taste
 }

 if(tastegedr != 0)                                    // Wenn eine Taste gedrückt wurde, hier weiter abarbeiten
 {
   analogWrite(Soundpin,beep);                              //Tastenpieps
   delay(10);
   analogWrite(Soundpin,nobeep);                      //Sound aus
 }
}


Mag mir jemand helfen ??

Danke vorweg

LC

Jomelo

Hi,
klar schau ich mir das gerne an ;-)

Willst du mit der Tastaturabfrage das Menü steuern ? Oder willst du das Menü dynamisch aufbauen ? So das sich Inhalte ändern können ?
Bzw, was hat das genau mit einem Menü zu tun ?

schönen Gruß
while(!success){try++;}

LC_Data

#2
Sep 19, 2009, 07:23 pm Last Edit: Sep 19, 2009, 08:10 pm by LC_Data Reason: 1
Hallo Jomelo,
schön das Du etwas Zeit für mich gefunden hast.

Kurz ein paar Worte zu meinem Vorhaben:

Es soll ein statisches Menue werden in dem ich noch nicht bestehende Variablen modifizieren möchte (einige sind True oder false, andere sind numerisch)

Ich stelle mir ein Menue in etwa so vor :

3 Hauptebenen

Programming          -            System         -          Ablauf
     |                                        |                              |
Intervall 1    -----|                 Uhr (Option)             Start Intervall 1
     |            Schritte                 |                              |
Intervall 2         |                 Vorlaufzeit                Start Intervall 2
     |            Schrittweite           |                              |
Intervall 3         |                  SVA                        Start Intervall 3
                   Vorlauf  
                       |
                    SVA

z.B. in dem 1ten Untermenue (Intervall 1) sollen noch weitere "Childs" folgen wie Eingabe von Schritten, Schrittweiten, Vorlauf (Ja/Nein) usw.
Die abgefragten Werte sollen dann ins EEProm geschrieben werden und dann im Ablaufmenue eine Kamera steuern (Fernauslöseeingang)


Was ich zusammen mit meinem Freund analysieren konnte war, das Du eine Abfrage realisiert hast ob eine Taste auch mal wieder losgelassen wurde (ist in meiner Abfrage nicht drin).

Wir hatten auch versucht heraus zubekommen mit welcher Variable Du aus der Tastaurabfrage heraus kommst um das Example an meine "tastegedr" Variable anzupassen... und schon daran sind wir kläglich gescheitert.
   
Das ist erstmal so ein grober Überblick des geplanten.

Ich hoffe das ich mich halbwegs verständlich ausgedrückt und Du kannst mit den Angaben etwas anfangen.

Ich freue mich auf Deine Antwort

LC

Jomelo

Hi,

euer vorhaben ist ohne Probleme machbar mit der jetzigen Klasse,
ich werde da morgen oder übermorgen nochmal ein Beispiel dazu hier reinstellen.

In meinem Aktuellen Projekt veränder ich auch Werte über das Menü.
Hierbei muss unterschieden werden ob die Funktion einmalig aufgerufen wird, oder aber ob die Funktion nach drücken des Buttons solange ausgeführt wird, bis zum Beispiel ein Wert geändert Wurde und mit "Enter" bestätigt wird.

Ich denk ich braucht da den zweiten fall, wo man längere Zeit in der Funktion arbeiten kann ohne das das Menü gleich wieder zürück zum Menü springt.

So nun genug Text für heute, nun kommt das Bett ;-)
while(!success){try++;}

mr-hyde

Für die Tastenansteuerung würde ich mir auch mal das Beispiel hier aus der  nokia_3310_lcd library unter
http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=1&products_id=12

anschauen.
Deren Tasten werden genauso angesteuert


LC_Data

Hallo Jomelo,

grundsätzlich hast Du richtig erkannt was ich möchte...
Würde mich freuen wenn Du mir ein wenig zur Hand gehen könntest und mir beim Aufbau eines "Gerüsts" helfen könntest.

@mr.Hyde,

feine Adresse.... sieht interessant aus. Werde ne Weile brauchen bis ich es geschnallt habe und hoffe das ich aus Jomelos und Deinem Vorschlag etwas brauchbares erstellen kann.

Danke Euch beiden ..

LC

Jomelo

So,

ich habe mal einen kleinen Teil aus meinem aktuellen Projekt zusammen gefasst.

Darin sind jetzt folgende Punkte enthalten:
- Riesen Menu generieren
- Funktion Start wird beim drücken Enter einmal ausgeführt
- Funktion Stop läuft solange in der schleife bis Enter oder Back gedrückt werden

Die Buttons musst du selber umsetzen auf deine Steuerung,
zudem müssen die Pins an das normale Arduino Board angepasst werden, da ich den Mega verwende.

Viel Spass damit,
bei Fragen gerne wieder Fragen

[code]
//# Wichtiges
//# =====================================
 // LCD 1 => Menu


//# Includes
//# =====================================
   #include <LiquidCrystal.h>
   #include <Menu.h>
   #include <LCDMenu2.h>
 

/* ****************************** *
/* TO Do

-

*/
//# Defines
//# =====================================


 //## Language Men[ch65533]
   #define _LANG_MENU_start_break       "Start/Pause"          // Enter
   #define _LANG_MENU_stop              "Stopp"            // Enter
   #define _LANG_MENU_game              "Spiel"                // ->
   #define _LANG_MENU_game_goals        "nach Toren"           // ->->
   #define _LANG_MENU_game_goals_1      "bis 6 Tore"           // Enter
   #define _LANG_MENU_game_goals_2      "bis 10 Tore"          // Enter
   #define _LANG_MENU_game_goals_3      "bis 20 Tore"          // Enter
   #define _LANG_MENU_game_goals_4      "Freies Spiel"         // Enter
   #define _LANG_MENU_game_time         "nach Zeit"            // ->->
   #define _LANG_MENU_game_time_1       "3 Minuten"            // Enter
   #define _LANG_MENU_game_time_2       "6 Minuten"            // Enter
   #define _LANG_MENU_game_time_3       "10 Minuten"           // Enter  
   #define _LANG_MENU_game_time_4       "Freies Spiel"         // Enter
   #define _LANG_MENU_contest           "Wettbewerb"           // ->->
   #define _LANG_MENU_contest_f         "Geschwindigkeit"      // ->->->
   #define _LANG_MENU_contest_f_goals   "nach Versuchen"       // ->->->->
   #define _LANG_MENU_contest_f_goals_1 "3 Versuche"           // Enter
   #define _LANG_MENU_contest_f_goals_2 "5 Versuche"           // Enter
   #define _LANG_MENU_contest_f_goals_3 "10 Versuche"          // Enter
   #define _LANG_MENU_contest_f_goals_4 "Freies Spiel"         // Enter
   #define _LANG_MENU_contest_f_time    "nach Zeit"            // ->->->->
   #define _LANG_MENU_contest_f_time_1  "1 Minute"             // Enter
   #define _LANG_MENU_contest_f_time_2  "2 Minuten"            // Enter
   #define _LANG_MENU_contest_f_time_3  "3 Minuten"            // Enter
   #define _LANG_MENU_contest_f_time_4  "5 Minuten"            // Enter
   #define _LANG_MENU_contest_f_time_5  "Freies Spiel"         // Enter
   #define _LANG_MENU_stat              "Statistik"            // ->
   #define _LANG_MENU_stat_goals        "Tore"                 // Enter
   #define _LANG_MENU_stat_time         "Zeit"                 // Enter
   #define _LANG_MENU_stat_speed        "Geschwindigkeit"      // Enter
   #define _LANG_MENU_set               "Einstellungen"        // ->    
   #define _LANG_MENU_set_test          "Selbst Test"          // ->->
   #define _LANG_MENU_set_test_lcd      "LCDs"                 // Enter
   #define _LANG_MENU_set_test_dimmer   "Dimmer"               // Enter    
   #define _LANG_MENU_set_reset         "Reset"                // ->
   #define _LANG_MENU_set_reset_stat    "Statistik"            // Enter
   #define _LANG_MENU_set_reset_set     "Einstellungen"        // Enter
   #define _LANG_MENU_set_reset_all     "Alles"                // Enter
   #define _LANG_MENU_standby           "Standby"              // ->
   #define _LANG_MENU_standby_p1        "Programm 1"           // Enter
   #define _LANG_MENU_standby_p2        "Programm 2"           // Enter
   


 //## Buttons  
   #define _BUTTON_enter  0
   #define _BUTTON_up     1
   #define _BUTTON_down   2
   #define _BUTTON_left   3
   #define _BUTTON_right  4
   #define _BUTTON_back   5    

 //## LCD Settings
   #define _LCD_rows 4
   #define _LCD_cols 20  

 //## Output LCD 1    
   #define _LCD_1_rs      22      // Menu
   #define _LCD_1_e       23      // Menu
   #define _LCD_1_dat4    24      // Menu
   #define _LCD_1_dat5    25      // Menu
   #define _LCD_1_dat6    26      // Menu
   #define _LCD_1_dat7    27      // Menu


 //## Times millisekunden
   #define _BUTTON_press_time         250
   //#define _
   
   #define _MENU_LEVEL_MAX  4     // Maximale Anzahl an Ebenen im Menü
   #define _MENU_MAIN_MAX   6     // Maximale Anzahl an Buttons untereinander in der Main Ebene


 
 
 


//# =============
//# =================================
//# ========================================================================
//# Do not Change Anithing here
//# ========================================================================
//# =================================
//# =============
//# Deklare Function
//# =====================================

//# Zeichen
//# =====================================
 //## Eigene Zeichen LCD 1
   uint8_t lcd_1_char_arrow_up[8]      = {0x04,0x0E,0x15,0x04,0x04,0x04,0x00,0x00};
   uint8_t lcd_1_char_arrow_down[8]    = {0x00,0x04,0x04,0x04,0x15,0x0E,0x04,0x00};      


 void BACK_back(int z=0);


 

//# Classes
//# =====================================
 //## LCD Init      
   LiquidCrystal lcd_1(_LCD_1_rs, _LCD_1_e, _LCD_1_dat4, _LCD_1_dat5, _LCD_1_dat6, _LCD_1_dat7);
 
 
 //## Men[ch65533] Init
   Menu lcd_g_menu("root");

 //## LCD Men[ch65533] Init
   LCDMenu2 lcd_g_display(lcd_g_menu, lcd_1, _LCD_rows, _LCD_cols, 0, 1);
   

//# Global Vars
//# =====================================
 //## Buttons
   int g_buttons[6]   = {_BUTTON_enter,_BUTTON_up,_BUTTON_down,_BUTTON_left,_BUTTON_right,_BUTTON_back};
   int g_button       = 0;   // Button aktiv
   int g_button_enter = 0;
   int g_button_back  = 0;
   int g_button_up    = 0;
   int g_button_down  = 0;
   int g_button_left  = 0;
   int g_button_right = 0;
 
 
    unsigned long g_button_press_time = millis();  
 
 
 //## LCD                
   char *lcd_g_func_aktuell = NULL;
   int lcd_g_func_activ     = 0;

 //## Menu
   Menu Item1      (_LANG_MENU_start_break);

   Menu Item2      (_LANG_MENU_stop);

   Menu Item4      (_LANG_MENU_game);
   Menu Item41     (_LANG_MENU_game_goals);
   Menu Item411    (_LANG_MENU_game_goals_1);
   Menu Item412    (_LANG_MENU_game_goals_2);
   Menu Item413    (_LANG_MENU_game_goals_3);
   Menu Item414    (_LANG_MENU_game_goals_4);
   Menu Item42     (_LANG_MENU_game_time);
   Menu Item421    (_LANG_MENU_game_time_1);
   Menu Item422    (_LANG_MENU_game_time_2);
   Menu Item423    (_LANG_MENU_game_time_3);
   Menu Item424    (_LANG_MENU_game_time_4);
   Menu Item43     (_LANG_MENU_contest);
   Menu Item431    (_LANG_MENU_contest_f);
   Menu Item4311   (_LANG_MENU_contest_f_goals);
   Menu Item43111  (_LANG_MENU_contest_f_goals_1);
   Menu Item43112  (_LANG_MENU_contest_f_goals_2);
   Menu Item43113  (_LANG_MENU_contest_f_goals_3);
   Menu Item43114  (_LANG_MENU_contest_f_goals_4);
   Menu Item4312   (_LANG_MENU_contest_f_time);
   Menu Item43121  (_LANG_MENU_contest_f_time_1);
   Menu Item43122  (_LANG_MENU_contest_f_time_2);
   Menu Item43123  (_LANG_MENU_contest_f_time_3);
   Menu Item43124  (_LANG_MENU_contest_f_time_4);
   Menu Item43125  (_LANG_MENU_contest_f_time_5);

   Menu Item5      (_LANG_MENU_stat);
   Menu Item51     (_LANG_MENU_stat_goals);
   Menu Item52     (_LANG_MENU_stat_time);
   Menu Item53     (_LANG_MENU_stat_speed);

   Menu Item6      (_LANG_MENU_set);
   Menu Item62     (_LANG_MENU_set_test);
   Menu Item621    (_LANG_MENU_set_test_lcd);
   Menu Item622    (_LANG_MENU_set_test_dimmer);  
   Menu Item64     (_LANG_MENU_set_reset);
   Menu Item641    (_LANG_MENU_set_reset_stat);
   Menu Item642    (_LANG_MENU_set_reset_set);
   Menu Item643    (_LANG_MENU_set_reset_all);

   Menu Item7      (_LANG_MENU_standby);
   Menu Item71     (_LANG_MENU_standby_p1);
   Menu Item72     (_LANG_MENU_standby_p2);
   
 //## Game
   //### Spiel
 

 
     


   

//# Funktionen
//# =====================================
 //## Buttons Init
   void g_button_init()
   {
     g_button_enter = 0;  
     g_button_back  = 0;
     g_button_up    = 0;
     g_button_down  = 0;
     g_button_left  = 0;
     g_button_right = 0;
   }

 //## Funktions Kopf
   int MAIN_init()
   {
     // Wenn Button Enter gedr[ch65533]ckt Wurde, Starte neue Funktion und setze
     // Button zur[ch65533]ck auf 0, n[ch65533]chste Funktion kommt dann erst, wenn der
     // Button erneut gedr[ch65533]ckt wird
     if(g_button_enter == 1) {
       lcd_g_func_aktuell = NULL;
       lcd_g_func_activ   = 0;
       g_button_enter     = 0;    
       return 0;
     } else {
       return 1;
     }
   }

 //## Funktions Schleife
   // Beendet die Funktion nicht nach dem ausf[ch65533]hren, diese Funktion wird dann
   // erneut aufgerufen
   void MAIN_init_loop(char *n)
   {
     lcd_g_func_aktuell = n;  
   }

 //## Funktion Active
   // Bestimmt, ob eine Funktion schonmal aufgerufen wurde, wenn ja, dann wird
   // false zur[ch65533]ck gegeben, wenn nein, kommt true
   int MAIN_init_active()
   {
     if(lcd_g_func_activ == 0) {
       lcd_g_func_activ = 1;
       return 0;
     } else {
       return 1;
     }
   }
   

     
     

//# Funktionen Game
//# ============
while(!success){try++;}

Jomelo

//## Spiel Start / Pause
   void FUNC_game_start_break(void)
   {      
     // Mach Irgendwas
     Serial.println("Start wurde gedrückt");
   }

 //## Spiel Neustarten
   void FUNC_game_stop(void)
   {
     MAIN_init();  // Funktion kopf wenn diese Funktion in einer schleife laufen soll    
     MAIN_init_loop(_LANG_MENU_stop);  // Button name, damit diese Funktion in einer Schleife laufen kann
   
     if(MAIN_init_active() == 0) {
       Serial.println("Stopp wurde gedrückt");
       Serial.println("Diesen Text nur einmal ausgeben, können auch funktionen sein ");
     }      
     
     Serial.println("loop");  // Dieser Text wird immer wiederholt ...              
   }

 //## Spiel Tore [00]
   void FUNC_game_goals(int set = 0)
   {
     
     // Auf die Erste Ebene wechseln
     BACK_back();
   }
 
 //## Spiel Zeit [01]
   void FUNC_game_time(int set = 0)
   {
     
   }
 //## Spiel Wettbewerb Geschwindigkeit Tore [02]  
   void FUNC_contest_f_goals(int set = 3)
   {
     
     
     BACK_back();
   }
 //## Spiel Wettbewerb Geschwindigkeit Zeit [03]
   void FUNC_contest_f_time(int set = 1)
   {
     
     
     BACK_back();
   }
 
 
 
 //## Spiel, Statistik Tore
   void FUNC_stat_goals(void)
   {
     
   }
 //## Spiel, Statistik Zeit
   void FUNC_stat_time(void)
   {
     
   }
 //## Spiel, Statistik Geschwindigkeit
   void FUNC_stat_speed(void)
   {
     
   }
   
 //## Test LCD
   void FUNC_set_test_lcd(void)
   {
     
   }
   
 //## Test Dimmer
   void FUNC_set_test_dimmer(void)
   {
     
   }  
     
 
 //## Reset All      
   void FUNC_set_reset(int z)
   {            
     
   }    

 //## Standby
   void FUNC_standby(int s = 0)
   {
     
   }





//# Function Menu Init
//# ====================================
 //## Men[ch65533] Init
   void INIT_menu()
   {
     lcd_g_menu.addChild(Item1);  
     lcd_g_menu.addChild(Item2);  
     lcd_g_menu.addChild(Item4);
       Item4.addChild(Item41);
         Item41.addChild(Item411);
         Item41.addChild(Item412);
         Item41.addChild(Item413);
         Item41.addChild(Item414);
       Item4.addChild(Item42);
         Item42.addChild(Item421);
         Item42.addChild(Item422);
         Item42.addChild(Item423);
         Item42.addChild(Item424);
       Item4.addChild(Item43);
         Item43.addChild(Item431);
           Item431.addChild(Item4311);
             Item4311.addChild(Item43111);
             Item4311.addChild(Item43112);
             Item4311.addChild(Item43113);
             Item4311.addChild(Item43114);
           Item431.addChild(Item4312);
             Item4312.addChild(Item43121);
             Item4312.addChild(Item43122);
             Item4312.addChild(Item43123);
             Item4312.addChild(Item43124);
             Item4312.addChild(Item43125);        
     lcd_g_menu.addChild(Item5);
       Item5.addChild(Item51);
       Item5.addChild(Item52);
       Item5.addChild(Item53);  
     lcd_g_menu.addChild(Item6);  
       Item6.addChild(Item62);
         Item62.addChild(Item621);
         Item62.addChild(Item622);        
       Item6.addChild(Item64);
         Item64.addChild(Item641);
         Item64.addChild(Item642);
         Item64.addChild(Item643);  
     lcd_g_menu.addChild(Item7);
       Item7.addChild(Item71);
       Item7.addChild(Item72);
 
     lcd_g_display.display();
   }
 

while(!success){try++;}

Jomelo

//# Function BACK
//# ====================================
 //## BACK Function Select
   void BACK_func(int select = 0)
   {
     if(g_button == 1) { // Erst aufrufen wenn button gedruck wurde
       g_button = 0;
       char *tmp;
     
       if(select == 0) {
         tmp = lcd_g_display.curfuncname;
       } else {
         tmp = lcd_g_func_aktuell;
       }
       
       if(tmp == _LANG_MENU_start_break) {
         FUNC_game_start_break();
         #ifdef _DEBUG_serial
           Serial.println("START/PAUSE");
         #endif    
       }
       else if(tmp == _LANG_MENU_stop) {
         FUNC_game_stop();
         #ifdef _DEBUG_serial
           Serial.println("STOP");
         #endif    
       }
       else if(tmp == _LANG_MENU_game_goals_1 && lcd_g_display.funcname[1] == _LANG_MENU_game_goals ) {
         FUNC_game_goals(6);
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Tore 6");
         #endif          
       }
       else if(tmp == _LANG_MENU_game_goals_2 && lcd_g_display.funcname[1] == _LANG_MENU_game_goals ) {
         FUNC_game_goals(10);
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Tore 10");
         #endif          
       }
       else if(tmp == _LANG_MENU_game_goals_3 && lcd_g_display.funcname[1] == _LANG_MENU_game_goals ) {
         FUNC_game_goals(20);
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Tore 20");
         #endif          
       }
       else if(tmp == _LANG_MENU_game_goals_4 && lcd_g_display.funcname[1] == _LANG_MENU_game_goals ) {
         FUNC_game_goals();
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Tore xx");
         #endif          
       }
       else if(tmp == _LANG_MENU_game_time_1 && lcd_g_display.funcname[1] == _LANG_MENU_game_time) {
         FUNC_game_time(3);
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Zeit 3");
         #endif          
       }
       else if(tmp == _LANG_MENU_game_time_2 && lcd_g_display.funcname[1] == _LANG_MENU_game_time) {
         FUNC_game_time(6);
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Zeit 6");
         #endif          
       }
       else if(tmp == _LANG_MENU_game_time_3 && lcd_g_display.funcname[1] == _LANG_MENU_game_time) {
         FUNC_game_time(10);
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Zeit 10");
         #endif          
       }      
       else if(tmp == _LANG_MENU_game_time_4 && lcd_g_display.funcname[1] == _LANG_MENU_game_time) {
         FUNC_game_time();
         #ifdef _DEBUG_serial
           Serial.println("SPIEL: um Zeit xx");
         #endif          
       }
       else if(tmp == _LANG_MENU_contest_f_goals_1 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_goals) {
         FUNC_contest_f_goals(3);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Versuche 3");
         #endif    
       }
       else if(tmp == _LANG_MENU_contest_f_goals_2 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_goals) {
         FUNC_contest_f_goals(6);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Versuche 6");
         #endif    
       }
       else if(tmp == _LANG_MENU_contest_f_goals_3 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_goals) {
         FUNC_contest_f_goals(10);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Versuche 10");
         #endif  
       }
       else if(tmp == _LANG_MENU_contest_f_goals_4 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_goals) {
         FUNC_contest_f_goals();
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Versuche xx");
         #endif    
       }
       else if(tmp == _LANG_MENU_contest_f_time_1 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_time) {
         FUNC_contest_f_time(1);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Zeit 1");
         #endif    
       }
       else if(tmp == _LANG_MENU_contest_f_time_2 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_time) {
         FUNC_contest_f_time(2);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Zeit 2");
         #endif  
       }
       else if(tmp == _LANG_MENU_contest_f_time_3 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_time) {
         FUNC_contest_f_time(3);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Zeit 3");
         #endif    
       }
       else if(tmp == _LANG_MENU_contest_f_time_4 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_time) {
         FUNC_contest_f_time(5);
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Zeit 5");
         #endif    
       }
       else if(tmp == _LANG_MENU_contest_f_time_5 && lcd_g_display.funcname[3] == _LANG_MENU_contest_f_time) {
         FUNC_contest_f_time();
         #ifdef _DEBUG_serial
           Serial.println("WETTBEWERB: SPEED: um Zeit xx");
         #endif    
       }
       else if(tmp == _LANG_MENU_stat_goals) {
         FUNC_stat_goals();  
       }
       else if(tmp == _LANG_MENU_stat_time) {
         FUNC_stat_time();    
       }
       else if(tmp == _LANG_MENU_stat_speed) {
         FUNC_stat_speed();  
       }  
       else if(tmp == _LANG_MENU_set_test_lcd) {
         FUNC_set_test_lcd();  
       }
       else if(tmp == _LANG_MENU_set_test_dimmer) {
         FUNC_set_test_dimmer();  
       }        
       else if(tmp == _LANG_MENU_set_reset_stat) {
         FUNC_set_reset(1);
       }
       else if(tmp == _LANG_MENU_set_reset_set) {
         FUNC_set_reset(2);
       }
       else if(tmp == _LANG_MENU_set_reset_all) {
         FUNC_set_reset(3);    
       }
       else if(tmp == _LANG_MENU_standby_p1) {
         FUNC_standby(1);  
       }
       else if(tmp == _LANG_MENU_standby_p2) {
         FUNC_standby(2);    
       }
     }  
   }

//## BACK Buttons
   void BACK_button(char c, int num = -1)
   {
     //## Select Button
     if(c == 'e' || num == _BUTTON_enter) {    
       //### Enter
       //### LCD
       lcd_g_display.goEnter();
   
       //### Function
       if(lcd_g_func_aktuell == NULL) {    
         BACK_func();
       } else {
         g_button_enter = 1;
         BACK_func(1);
       }    
     } else if(c == 'w' || num == _BUTTON_up) {
       //### UP
       lcd_g_display.goUp();
       g_button_up++;    
     } else if(c == 's' || num == _BUTTON_down) {
       //### DOWN
       lcd_g_display.goDown();
       g_button_down++;  
     } else if(c == 'a' || num == _BUTTON_left) {
       //### LEFT
       g_button_left++;  
     } else if(c == 'd' || num == _BUTTON_right) {
       //### RIGHT
       g_button_right++;
     }
     
     
     if(c == 'q' || num == _BUTTON_back){
       //### BACK
       //### LCD Back
       lcd_g_display.goBack();
       //### Reset Enter
       g_button_init();
       g_button_back = 1;    
       //### Function Reset
       lcd_g_func_aktuell = NULL;
       lcd_g_func_activ   = 0;    
     }
     
   }

void BACK_back(int z) // int = 0 => position zur[ch65533]ck, int = 1 => position halten
   {
     for(int i=0; i<_MENU_LEVEL_MAX; i++) {
       BACK_button('z', _BUTTON_back);
     }
   
     if(z == 0) {
       for(int i=0; i<_MENU_MAIN_MAX; i++) {
         BACK_button('z', _BUTTON_up);
       }
     }
   }
   
   
 



//# Setup
//# =====================================
void setup()
{  
 //## Outputs  
   pinMode(_LCD_1_rs,     OUTPUT);
   pinMode(_LCD_1_e,      OUTPUT);
   pinMode(_LCD_1_dat4,   OUTPUT);
   pinMode(_LCD_1_dat5,   OUTPUT);
   pinMode(_LCD_1_dat6,   OUTPUT);
   pinMode(_LCD_1_dat7,   OUTPUT);
 
 
 //## INIT LCDds  
   lcd_1.begin(_LCD_rows,_LCD_cols);    
   lcd_1.createChar(0, lcd_1_char_arrow_up);
   lcd_1.createChar(1, lcd_1_char_arrow_down);
   delay(5);
 
 
   
   
 
 //## Debug Funktion
   #ifdef _DEBUG_serial
     Serial.begin(9600);
     Serial.println("DEBUG MODUS:\n=========================");      
   #endif  
   
 //## INIT Men[ch65533]
   g_button_init();
   INIT_menu();
 
}

//# LOOP
//# =====================================
void loop()
{  
   
 //## Button Check
 //## =======================================
     for(int i=0; i<6; i++) {    
       if(analogRead(g_buttons) >= 1000) {          
         if((millis()-g_button_press_time) >= _BUTTON_press_time) {          
           g_button = 1;
           BACK_button('z',i);
           g_button_press_time = millis();
         }
         //delay(_BUTTON_press_time);      
       }
       
       #ifdef _DEBUG_serial
         if(Serial.available()) {
           char c = Serial.read();            
           g_button = 1;
           Serial.println(c);
           BACK_button(c);
         }        
       #endif
     }  
 
 //## Function Check
 //## =======================================
     if(lcd_g_func_aktuell != NULL) {
       BACK_func(1);
     }
}
while(!success){try++;}

Jomelo

So, das war nun alles, das das nicht alles in einen Eintrag reingeht, ist nen bischen dumm,

einfach alle Stücke zusammen fügen und teste obs klappt,  beim nächstenmal lade ich die Datei lieber auf dem Server hoch  ;)

while(!success){try++;}

LC_Data

Hi Jomelo,

ist ja jede Menge Holz... ähm Text...
vielen Dank Für Deine Mühe...

Ich habe schon mit meinem C-Kumpel gesprochen.... wir werden viel Spass haben...

ICQ-Kontakt war nett ...... vielen Dank auch dafür

LC_Data


Go Up