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;
}
}