Hallo fredred
hab ich da was überlesen. "In meinen bescheiden Code mache ich es ...", sagst du. Würde es gern mal anschauen.
achim
Druckbare Version
Hallo fredred
hab ich da was überlesen. "In meinen bescheiden Code mache ich es ...", sagst du. Würde es gern mal anschauen.
achim
Hallo Achim,
nichst überlesen! Habe ja kein Code eingestellt. Sollte doch nur ein Hinweis sein. Natürlich wenn Interesse, werde ich meine Variante zu Verfügung stellen.
Vorab ein Schnipsel:
'**** Variable für Anzeigeauswahl ****
Dim Lcd_aktualisieren As Byte 'Zähler für LCD-Anzeigen
Gosub Anzeigen
'************ Bereich für LCD -Anzeigen ***************************
Anzeigen:
'****** Startfenster *******
If Lcd_aktualisieren = 255 Then
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd Status ; " ist Startfenster "
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd " Hallo Achim "
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd " Datum " ; Date$ ; " "
Locate 4 , 1 'Cursor auf 4 Zeile, 1 Spalte
Lcd " Zeit " ; Time$ ; " "
End If
'***************************
'hier zur LCD - Datenanzeige für Funk
If Lcd_aktualisieren = 254 Then
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd Status ; " D0 | D1 | D2 "
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd "_ " ; D0 ; " _|_ " ; D1 ; " _|_ " ; D2 ; "_ "
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd " Temp1: " ; Temper1 ; " ßC "
Locate 4 , 1 'Cursor auf 4 Zeile, 1 Spalte
Lcd " Temp2: " ; Temper2 ; " ßC "
End If
'***************************
'hier zur LCD - Anzeige für Poti
If Lcd_aktualisieren = 253 Then
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd Status ; " Poti Anzeige "
Locate 2 , 2 'Cursor auf 2 Zeile, 2 Spalte
Lcd " *Werte in Volt* "
Locate 3 , 2 'Cursor auf 3 Zeile, 2 Spalte
Lcd " Poti0 = " ; W0 ; " "
Locate 4 , 2 'Cursor auf 4 Zeile, 2 Spalte
Lcd " Poti1 = " ; W1 ; " "
End If
'***************************
'hier Anzeige Touch-Werte
If Lcd_aktualisieren = 252 Then
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd " Touch Werte lesen "
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd " Achsen testen "
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd " X = " ; X ; " " 'die leer Zeichen löschen den Rest
Locate 4 , 1 'Cursor auf 4 Zeile, 1 Spalte
Lcd " Y = " ; Y ; " "
End If
'***************************
'hier Anzeige Touch-Panel
If Lcd_aktualisieren = 0 Then
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd " Touch Test "
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd " ************* "
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd " * ENTER * " 'die leer Zeichen löschen den Rest
Locate 4 , 1 'Cursor auf 4 Zeile, 1 Spalte
Lcd " ************* "
Wait 1 'für Test anzeigen 3 Sekunden
End If
'***************************
'hier Anzeige Beispiel Temperaturreglung
If Lcd_aktualisieren = 2 Then
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd " Temperaturwarnung "
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd " T1= 3 " ; "ßC" ; " zu hoch "
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd " Temp1: " ; Tempfehler ; " ßC "
Locate 4 , 1 'Cursor auf 4 Zeile, 1 Spalte
Lcd " Temp2: " ; Temper2 ; " ßC "
Wait 5
End If
'***************************
usw.
Gruß
Fred
Hab da doch was überlesen, ist Basic und ich nutze C. Schade
Danke
achim
Hallo Fred,
kannst Du bitte Deinen ganzen Code reinstellen?
Gruß Andreas
Hallo Andreas,
Zitat:
kannst Du bitte Deinen ganzen Code reinstellen?
könnte ich. Passt aber nicht mehr zum Thema. Projekt ist eine umfangreiche MSR- Haussteuerung auch mit Funkübertragung (alles Eigenbau) Wenn immer noch Interesse schicke ich den Code(bas 938 Zeilen) als PN.
Mit freundlichen Grüßen
Fred
Hallo Fred
.. leider kann ich die Wiederverwendbarkeit deines Codes nicht nachvollziehen.
Sinn dieser Routine war die Generierung einer Menustruktur nur durch Konfiguration des Dataset am Ende des Codes zu schaffen.
was du in deinem Programm machst ist je nach Ablauf des Programms Variablen aufs Display zu schreiben ...
wie kann man so einen Universell gesteuerten Menueablauf generieren ?
Mein Code soll die Reduktion von mehrfach verzweigten Menuestrukturen bewirken.
Du verwendest pro Menuepunkt 4 locate und 4 lcd befehle das mal die Anzahl von Menuepunkten frisst ordentlich Speicherplatz.
Ich verwende insgesamt nur 8 LCD Befehle für die Menueanzeige im Gesamten Programm unabhängig wieviel Menueeinträge vorhanden sind.
Du musst wissen als ich das Programm vor ca 10 Jahren geschrieben habe war Speicherplatz im ATmega stark begrenzt
Aber trozdem grossen Respekt an dich, daß du dich in deinem Alter noch an an eine MSR Steuerung mit 8-bit Prozessor im
Eigenbau heran wagst .
Gruß Daniel
Hallo Daniel,
hast völlig Recht. Die Taster haben mir nicht gefallen.
Im meiner MSR Steuerung teilen sich ein Atmega 644P und einen 128 die Arbeit. Die Parameter, von zu, tausche ich mit Uart (TTL) aus. Somit war und ist Speicherplatz zusparen nicht das Wichtigste für mich. Nur die Anzeige sollte immer das gleiche Format haben und nicht „flackern“. Anfänglich hatte ich es mit dem „blödem“ CLS- Befehl gemacht.
Zitat:
Mein Code soll die Reduktion von mehrfach verzweigten Menuestrukturen bewirken.
Zitat Ende
Wie gesagt deine Lösung finde ich Gut, sind aber andere Verhältnisse.
Beispiel: Wird ein Hausalarm ausgelöst, springe in Anzeige WO. Kommt Funkmeldung PV- Akku wird nicht mehr geladen springe in Anzeige PV. Möchte ja wissen ob „Susi“ nicht mehr genug „Kraft“ hat oder es sich um eine Störung handelt.
Kommt eine Meldung Lastprofilspeiche für Strom- Gaszäher ist fast voll springe in Anzeige Daten sichern usw.
Wichtig war für mich die Starteinstellung. Display zeig DCF77 an, in der letzen Zeile wird angezeigt, wo die Controller, gerate „herum Tadeln“. In allen Sub’s kann ich ein Status setzen (erst wenn sich Variable X ändert auch in %) nur dann in passende Anzeige springen.
Displayanzeige hat ja durch Klartext plus Variable in Zeilen immer eine andere Länge.
Soll halt nur „Schmuck“ aussehen und meine liebe Frau soll es auch deuten können für eventuelle Reaktionen.
Vielen Danke für Info der alte Mann
Fred
Beschwerden über Schreibfehler, fehlende Buchstaben oder Leerzeichen bitte an meine Tastatur richten.
ich mach ja ungern den Pingeligen, aber "Goto" in Hülle und Fülle ist nicht so der optimale Programmierstil ...
Respekt vor der Leistung, doch das ist eher suboptimal gelöst.
Hallo Vitis,
Machst nicht den Pingeligen.
Freue mich immer wenn ein sachlicher Kommentar kommt. Nur dann bekommt man die Möglichkeit, sich zu rechtfertigen, warum dieser Programmierstil für dieses Projekt angewannt wird.
Code soll übersichtlich sein. Es kommen ja ständig neue Sensoren, Abfragen und Entscheidungen dazu.
Aber wo stehen im Code in „Hülle und Fülle“ Goto.
Besonders in größeren Projekten vermeide ich dies. Goto setzt ja kein Zeiger und damit verliert man schnell den Überblick.
Verwende Gosub ist doch schon ein großer Unterschied. Hier wird ein Zeiger gesetzt(Aufrufen und mit Return zurück zur nächster Zeile nach Aufruf)Kleiner Nachteil es müssen mehr Speicher im Header reservieren werden.
Aber wer hat der hat.
Könnte auch eine Declare Sub xxx verwenden. Sub ist zwar die eleganteste Lösung, hat aber auch Nachteile. Die Variablen in der Sub sind nicht öffentlich. Somit erst in Declare öffentlich machen. Reservierter Speicherplatz wirt auch nicht kleiner.
Ich sehe keinen Grund warum ich den Code suboptimal zu lasten der Übersicht ändern sollte. Muss ja auch immer die Laufzeit beachten und welche Entscheitung Vorrang hat.
Mit freundlichen Grüßen
Fred
Hallo Ihr zwei ...
nein Vitis hat schon recht goto ist nicht der feine Programmierstil und vor 10 Jahren (so alt is der Thread fast) war ich noch Programmieranfänger ...
Davon mal abgesehen ist es Code abhängig welche Codeverweigung sinnvoll ist ..