Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed


#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>

#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "display.h"
#include "motortest.h"
#include "debug.h"
#include "settings.h"


// Subroutine für den Stern (*) bzw. Cursor

void menu_set_cursor (uint8_t before, uint8_t line, uint8_t pos)
{
        lcd_print_atp(pos,before,PSTR(" "),0);                                                                  // Die vorhergehende Position löschen
        lcd_print_atp(pos,line,PSTR("*"),0);                                                                    // Den Cursor an der aktuellen Position anzeigen
}


// Zeigt einen Stern (*) an der x-Position <pos> an, y-Position von min bis max.
// Mit der +/- Taste kann ein Menü-Punkt ausgewählt und mit (Enter) bestätigt werden.
// Die Zeilennummer des aktuellen Menüpunkts wird zurückgegeben.

uint8_t menu_choose (uint8_t min, uint8_t max, uint8_t pos)
{
        uint8_t line, before;
       
        line = min;
        before = min;
        menu_set_cursor(line,line,pos);
       
        do
        {
                while (key != key_nokey);
                while(key == key_nokey);
               
                if ((key == key_plus) && (line < max))
                        line ++;
                if ((key == key_minus) && (line > min))
                        line --;

                menu_set_cursor(before,line,pos);
                before = line;
        }
        while ((key != key_enter) && (key != key_esc));                         // Schleife wiederholen, bis (Enter) / Esc gedrückt wurde
        if (key == key_esc)
                line = 255;
        while (key != key_nokey);                                                                       // Warten, bis Taste wieder losgelassen wurde
        return line;
}

void main_menu (void)
{
        lcd_cls();
        lcd_printp(PSTR("Hauptmenü(BETA V0.1)\r\n"),0);
        lcd_printp(PSTR("\r\nDisplay\r\n"),0);
        lcd_printp(PSTR("Parameter\r\n"),0);
        lcd_printp(PSTR("Motortest\r\n"),0);
        lcd_printp(PSTR("Debug Daten\r\n"),0);
        lcd_printp(PSTR("Settings\r\n"),0);
        lcd_printp(PSTR("Mod by Mikeljo 05/08"),0);

        switch(menu_choose(2,6,12))
        {
                case 2:
                        display_data();                                                                 // LCD-Modus
                        break;
                case 3:
                        edit_parameter();                                                               // Parameter (Settings) laden/editieren
                        break;
                case 4:
                        motor_test();                                                                   // primitiver Motor-Test
                        break;
                case 5:
                        display_debug();                                                                //  Debug Daten
                        break;
                case 6:
                        LCD_settings();                                                                 // Einstellungen
                        break;
        }
       
}