Datum: 26.01.2008 20:23
Hallo
Ich bin dabei eine Haussteuerung zu entwickeln!
Das ganze soll über ein Menü zu Bedienen sein.
Die erste Menülage habe ich bereits programmiert!
Allerdings habe ich Probleme mit den Untermenüs.
Ich bekomme das einfach nicht hin!
kann mir jemand helfen?
// (c) Jan Hermann
//--------------------------------------------------------------------
#include "main.h"
long t;
unsigned int TestInt = 0;
#define ARRAYGROESSE 10
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10};
void Menu(unsigned char key)
{
static unsigned int arr = 0;
static unsigned char MaxMenue = 19,MenuePunkt=0;
unsigned char text[19];
if(key & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt =
MaxMenue; LCD_Clear; }
if(key & KEY2) { MenuePunkt++; LCD_Clear; }
if((key & KEY1) && (key & KEY2)) MenuePunkt = 0;
sprintf(text,"[%i]",MenuePunkt);
LCD_Writexy(16,0,text);
switch(MenuePunkt)
{
case 0:
LCD_Writexy(0,0,"Haussteuerung");
LCD_Writexy(0,1,"(C) Jan Hermann");
LCD_Writexy(0,2,"1.2008");
break;
case 1:
LCD_Writexy(0,0,"System-Uhr");
sprintf(text,"%3i:%002i:",Minute,Sekunde);
LCD_Writexy(0,1,text);
sprintf(text,"%002i:%2i:",Sekunde,Minute);
LCD_Writexy(1,2,text);
if(key & KEY3) if(Minute) Minute--;
if(key & KEY4) Minute++;
if(key & KEY5) Sekunde = 0;
break;
case 2:
LCD_Writexy(0,0,"Einstellungen");
LCD_Writexy(0,1,"Grundstruktur");
if(key & KEY5)
{
}
break;
case 3:
LCD_Writexy(0,0,"Deckenlichter");
Ein Auszug aus dem Quelltext.
Der ganze Code steht im Anhang!
mfg Jan Hermann
Datum: 27.01.2008 09:20
Schaue Dir mal die Quellem zum AVR Butterfly an, die Statusmaschine von dort kannst Du gut gebrauchen... Gruß, Holm
Datum: 01.02.2008 17:11
Ich kann die Statusmaschiene nicht finden! Gibt es auch noch andere Möglichkeiten?
Datum: 01.02.2008 17:19
Eine Skizze der verschiedenen Zustände und der Übergänge zwischen den Zuständen kann weiterhelfen. Dadurch, dass man die skizze unabhängig vom Codieren macht, bekommt man selbst mehr Überblick, ob alle Zustände angefahren werden können und wie sie miteinander wechselwirken. Und man kann damit anderen seine Idee einfach und anschaulich verklickern, ohne dass diese sich durch einen nichtfunktionierenden Code beissen müssen, um herauszufinden wie du es mit dem Menü gemeint haben könntest.
Datum: 01.02.2008 17:25
Schau dir dein Programm mal mit dem Debugger an.
Datum: 01.02.2008 17:43
Diese Zeile verstehe ich nicht:
> default: MaxMenue = MenuePunkt - 2;
Da du mit unsigned Variablen arbeitest gelangst du hier gerne in eine
Überlaufsituation.
Ansonsten ist das
if(key & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LCD_Clear; } if(key & KEY2) { MenuePunkt++; LCD_Clear; } if((key & KEY1) && (key & KEY2)) MenuePunkt = 0; |
kritisch. Besser ist es die Fälle mit else abzugrenzen und zwar zuerst auf Doppelbetätigung achten und wenn Doppelbetätigung nicht stattfindet die Einzelbetätigung abzufragen.
#define TASTE_MENUE_ERNIEDRIGEN (key & KEY1) #define TASTE_MENUE_ERHOEHEN (key & KEY2) if(TASTE_MENUE_ERHOEHEN && TASTE_MENUE_ERNIEDRIGEN) { MenuePunkt = 0; // hier nicht LCD_Clear; !? } else if(TASTE_MENUE_ERHOEHEN) { MenuePunkt += 1; if(MenuePunkt > MaxMenue) MenuePunkt = 0; // Wraparound LCD_Clear; } else if(TASTE_MENUE_ERNIEDRIGEN) { if(MenuePunkt) MenuePunkt -= 1; else MenuePunkt = MaxMenue; // Wraparound LCD_Clear; } |
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel