Sie sind hier: Home » Datenlogger V2 » Programm V2 » Prg Menue V2

'*******************************************************************************
'**************************   DATENLOGGER V2 Menue    **************************
'*******************************************************************************

'name                     : Datenlogger2_menue V0.96.bas
'copyright                : (c) 08.07.2017 jep
'purpose                  : diverse Menues zu Datenlogger_V2
'micro                    : Mega1284P-PU


'===============================================================================
'===============================================================================
'===============================   Menueauswahl   ==============================
'===============================================================================
'===============================================================================

Menueauswahl:
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   gosub Beleuchtung_ein                                    'Beleuchtung einschalten

Menueauswahl1:
   Print "Menue1"
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "1 Daten anzeigen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "2 Zustand Funksensoren" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Fehlerprotokoll" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 SD-Karte anmelden" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Aufzeichnungsintervall" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "6 ----------" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + "7 Diverse Einstellungen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(105) + Chr(240) + Chr(105)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(107) + Chr(240) + Chr(107)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z9) + "Mit OK waehlen," + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Auslesen                               'mit OK zum Auslesen
   Debounce Up , 0 , Menue7anzeige                          'mit Up zum letzten Menue
   Debounce Down , 0 , Menue2anzeige                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

'---------------------

Menue2anzeige:
   Print "Menue2"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "1 Daten anzeigen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "2 Zustand Funksensoren" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Fehlerprotokoll" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Zustand_Funk                           'mit OK zur Funkübersicht
   Debounce Up , 0 , Menueauswahl1                          'mit Up zum vorherigen Menue
   Debounce Down , 0 , Menue3anzeige                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

'---------------------

Menue3anzeige:
   Print "Menue3"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "2 Zustand Funksensoren" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Fehlerprotokoll" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 SD-Karte anmelden" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Fehlerprotokoll                        'mit OK zm Fehlerprotokoll
   Debounce Up , 0 , Menue2anzeige                          'mit Up zum vorherigen Menue
   Debounce Down , 0 , Menue4anzeige                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

'---------------------

Menue4anzeige:
   Print "Menue4"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Fehlerprotokoll" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 SD-Karte anmelden" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Aufzeichnungsintervall" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , SD_Karte_anmelden                      'mit OK SD-Karte anmelden
   Debounce Up , 0 , Menue3anzeige                          'mit Up zum vorherigen Menue
   Debounce Down , 0 , Menue5anzeige                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

'---------------------

Menue5anzeige:
   Print "Menue5"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 SD-Karte anmelden" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Aufzeichnungsintervall" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "6 -----" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + "7 Diverse Einstellungen" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Intervall_einstellen                   'mit OK Intervall einstellen
   Debounce Up , 0 , Menue4anzeige                          'mit Up zum vorherigen Menue
   Debounce Down , 0 , Menue7anzeige                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

'---------------------

Menue6anzeige:                                              'wird übersprungen
   Print "Menue6"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Aufzeichnungsintervall" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "6 -----" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + "7 Diverse Einstellungen" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , leerer_Punkt                           'mit OK sofort weiter; Reservepunkt
   Debounce Up , 0 , Menue5anzeige                          'mit Up zum vorherigen Menue
   Debounce Down , 0 , Menue7anzeige                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop


'---------------------

Menue7anzeige:
   Print "Menue7"

   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Aufzeichnungsintervall" + Chr(13)
   Gosub Write_edip

   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "6 -----" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + "7 Diverse Einstellungen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "1 Daten anzeigen" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Zusatzmenueauswahl                     'mit OK zur Datums- und Zeiteinstellung
   Debounce Up , 0 , Menue5anzeige                          'mit Up zum vorherigen Menue
   Debounce Down , 0 , Menueauswahl1                        'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop


'---------------------

Menueende:
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Timeout = 0                                              'zur Sicherheit vor Rückkehr nochmals auf 0 setzen

Goto Menuerueckkehr

'===============================================================================
'===============================================================================
'===========================   Ende Menueauswahl   =============================
'===============================================================================
'===============================================================================

'===============================================================================
'=========================== Die einzelnen Menues ==============================
'===============================================================================

'===============================================================================
'============ 1 liest Daten aus und stellt sie auf dem Display dar =============
'===============================================================================

Auslesen:
   Timeout = 30                                             '30 sec Timeout
   Displp_horiz = 1                                         'auf Zeilenanfang
   Gosub Read_adress_pointer                                'zuerst wird der aktuelle Adresspointer geladen
   Ausleseadresse = Adresspointer - 32                      'Anfangsadresse steht nun auf dem zuletzt geschriebenen Datensatz

Auslesen1:
   Gosub Disp_aufbereiten
   Gosub Temp_anzeigen

Auslesen2:
   Debounce Rechts , 0 , Rechtsschieben , Sub
   Waitms 10
   Debounce Links , 0 , Linksschieben , Sub
   Waitms 10
   Debounce Up , 0 , Vorwaerts , Sub
   Waitms 10
   Debounce Down , 0 , Rueckwaerts , Sub
   Waitms 10
   Debounce Ok , 0 , Abschluss
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Abschluss
   Else
      Goto Auslesen2
   End If

Abschluss:
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Goto Menueende
'_______________________________________________________________

Rechtsschieben:
   Timeout = 30
   Beleuchtungsdauer_rest = Beleuchtungsdauer
   Displp_horiz = Displp_horiz + 28
   If Displp_horiz > 104 Then Displp_horiz = 1
   Gosub Temp_anzeigen
Return

Linksschieben:
   Timeout = 30
   Beleuchtungsdauer_rest = Beleuchtungsdauer
   If Displp_horiz = 1 Then
   Displp_horiz = 85
   Else
   Displp_horiz = Displp_horiz - 28
   End If
   Gosub Temp_anzeigen
Return

Vorwaerts:
   Timeout = 30
   Beleuchtungsdauer_rest = Beleuchtungsdauer
   Ausleseadresse = Ausleseadresse + 224                    '7 Datensätze (zu 32 Bytes) vorwärts

Print
Print "V   : " ; Hex(Adresspointer) ; "  " ; Hex(Ausleseadresse)       '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Print

   LetzteAdresse = Adresspointer - 32                       'steht nun auf dem zuletzt geschriebenen Datensatz
   If Ausleseadresse > LetzteAdresse Then                   'neuester Datensatz höher als letzte gespeicherte Adresse
      Ausleseadresse = LetzteAdresse                        'auf letzte gespeicherte Adresse stellen
'(
      Gbuffer = Chr(27) + "RL" + Chr(1) + Chr(44) + Chr(240) + Chr(128) + Chr(13)       'unterer Bereich löschen
      Gosub Write_edip
      Gbuffer = Chr(27) + "ZL" + Chr(10) + Chr(z7) + "neuester Datensatz erreicht" + Chr(13)
      Gosub Write_edip
      Return
')
      Gosub Disp_aufbereiten
      Gosub Temp_anzeigen
   Else
      Gosub Disp_aufbereiten
      Gosub Temp_anzeigen
   End If
Return

Rueckwaerts:
   Timeout = 30
   Beleuchtungsdauer_rest = Beleuchtungsdauer
   Ausleseadresse = Ausleseadresse - 224                    '7 Datensätze rückwärts
   If Ausleseadresse < &H500100 Then                        'wenn 7 Datensätze abgezogen würden geht es unter "0"
      Ausleseadresse = &H500100                             '"0" ist h500020 wegen EEProm-Device-Adressierung, also dann 7 Datensätze mehr
'(
      Gbuffer = Chr(27) + "RL" + Chr(1) + Chr(46) + Chr(240) + Chr(128) + Chr(13)       'unterer Bereich löschen
      Gosub Write_edip
      Gbuffer = Chr(27) + "ZL" + Chr(10) + Chr(z7) + "---- Anfang erreicht ----" + Chr(13)
      Gosub Write_edip
      Return
')
      Gosub Disp_aufbereiten
      Gosub Temp_anzeigen
   Else
      Gosub Disp_aufbereiten
      Gosub Temp_anzeigen
   End If
Return

'-------------------------------------------------------------------------------
'------------------------   Displayanzeige aufbereiten   -----------------------
'-------------------------------------------------------------------------------

Disp_aufbereiten:

   Ausgabe_lcd(2) = "S_Vorl S_R" + Chr(129) + "ck H_Vorl H_R" + Chr(129) + "ck E_unt. E_oben A_Nord A_Sued WohnZi SchlZi  WiGa   oben   Res            WP   Roebby"       '2te Titelzeile des grafischen LCDs

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip

   O = 3                                                    'zeigt auf Zeile 3 (Kopfzeile 1 + 2 sind fix)
   Do
'      N = 1                                                 'Pointer auf Temperatur im Anzeigeformat
      Speicheradresse = Ausleseadresse                      'EEPROM braucht "Speicheradresse"
      Gosub Read_eeprom                                     'Datensatz aus Eeprom holen
      If Daten_out(6).0 = 1 Then                            'wenn Bit0 = 1 = on
'         Wpstatus_kurz = " E "
         Wpstatus_lang = " Ein   "
         WPstatus(o) = "1"                                  'dient zum Invertieren der Anzeige
      Else
 '        Wpstatus_kurz = " A "
         Wpstatus_lang = " Aus   "
         WPstatus(o) = "0"                                  'dient zum Invertieren der Anzeige
      End If

      If Daten_out(6).1 = 1 Then                            'wenn Bit1 = 1 = In = laden
         Roebbystatus_lang = " laden"
      Else
         Roebbystatus_lang = " m" + Chr(132) + "hen"
      End If

  'Temperaturanzeige vorbereiten; abgelegt im Integer-Format (-32768....+32767) als Overlay über Daten_out
      For n = 1 to 13                                       'max. 13 Temperaturen möglich
         Temperatursingle(n) = Ta(n) / 10
         Tempkomma = Fusing(temperatursingle(n) , "##.#")   'Komma festlegen
         Text_aus(n) = Format(tempkomma , "+0000") + Chr(248) + " "       'Zahlenausgabe formatieren Grad- und Spacezeichen anhängen
         If Temperatursingle(n) > 100 Then Text_aus(n) = " --.-  "
         If Temperatursingle(n) < -100 Then Text_aus(n) = " --.-  "
      Next n
      Tag(o) = Makebcd(daten_out(1))                        'nächste Temperatur im Anzeigeformat
      Monat(o) = Makebcd(daten_out(2))
      Jahr(o) = Makebcd(daten_out(3))
      Stunden(o) = Makebcd(daten_out(4))
      Minuten(o) = Makebcd(daten_out(5))
      Ausgabe_lcd(o) = S_Vor + S_Ruck + H_Vor + H_Ruck + E_unten + E_oben + A_Nord + A_Sud + W_Zi + S_Zi + Wi_Ga + oben + "------        " + Wpstatus_lang + Roebbystatus_lang
      O = O + 1                                             'eine Zeile weiter
      Ausleseadresse = Ausleseadresse - 32                  'Pointer auf ein Datensatz früher
   Loop Until O = 10                                        'für 7 zusätzliche Zeilen (+ Kopfzeile)
   Ausleseadresse = Ausleseadresse + 224                    'Pointer wieder auf Anfang setzen
Return

'-------------------------- Temperaturen anzeigen ------------------------------

Temp_anzeigen:
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "Datum: " + Hex(tag(3)) + "." + Hex(monat(3)) + "." + Hex(jahr(3)) + Chr(13)       '1. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "Zeit  " + Mid(ausgabe_lcd(2) , Displp_horiz , 27) + Chr(13)       '2. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(28) + Chr(240) + Chr(28)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(39) + Chr(28) + Chr(39) + Chr(128)       'senkrechte Gerade
   Gosub Write_edip

'(
'ohne senkrechten Strich
   Inv_schalten = WPstatus(3)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + Hex(stunden(3)) + ":" + Hex(minuten(3)) + " " + Mid(ausgabe_lcd(3) , Displp_horiz , 28) + Chr(13)       '3. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(4)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + Hex(stunden(4)) + ":" + Hex(minuten(4)) + " " + Mid(ausgabe_lcd(4) , Displp_horiz , 28) + Chr(13)       '4. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(5)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + Hex(stunden(5)) + ":" + Hex(minuten(5)) + " " + Mid(ausgabe_lcd(5) , Displp_horiz , 28) + Chr(13)       '5. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(6)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + Hex(stunden(6)) + ":" + Hex(minuten(6)) + " " + Mid(ausgabe_lcd(6) , Displp_horiz , 28) + Chr(13)       '6. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(7)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + Hex(stunden(7)) + ":" + Hex(minuten(7)) + " " + Mid(ausgabe_lcd(7) , Displp_horiz , 28) + Chr(13)       '7. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(8)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z8) + Hex(stunden(8)) + ":" + Hex(minuten(8)) + " " + Mid(ausgabe_lcd(8) , Displp_horiz , 28) + Chr(13)       '8. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(9)
   call WP_aktiv(Inv_schalten)
   waitms 20                                                'da kommt das Display scheinbar an die Grenze
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z9) + Hex(stunden(9)) + ":" + Hex(minuten(9)) + " " + Mid(ausgabe_lcd(9) , Displp_horiz , 28) + Chr(13)       '9. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers ausschalten
   Gosub Write_edip
Return
')

'mit senkrechtem Strich
   Inv_schalten = WPstatus(3)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + Hex(stunden(3)) + ":" + Hex(minuten(3)) + Chr(13)       '3. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z3) + Mid(ausgabe_lcd(3) , Displp_horiz , 28) + Chr(13)       '3. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(4)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + Hex(stunden(4)) + ":" + Hex(minuten(4)) + Chr(13)       '4. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z4) + Mid(ausgabe_lcd(4) , Displp_horiz , 28) + Chr(13)       '4. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(5)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + Hex(stunden(5)) + ":" + Hex(minuten(5)) + Chr(13)       '5. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z5) + Mid(ausgabe_lcd(5) , Displp_horiz , 28) + Chr(13)       '5. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(6)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + Hex(stunden(6)) + ":" + Hex(minuten(6)) + Chr(13)       '6. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z6) + Mid(ausgabe_lcd(6) , Displp_horiz , 28) + Chr(13)       '6. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(7)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + Hex(stunden(7)) + ":" + Hex(minuten(7)) + Chr(13)       '7. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z7) + Mid(ausgabe_lcd(7) , Displp_horiz , 28) + Chr(13)       '7. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(8)
   call WP_aktiv(Inv_schalten)
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z8) + Hex(stunden(8)) + ":" + Hex(minuten(8)) + Chr(13)       '8. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z8) + Mid(ausgabe_lcd(8) , Displp_horiz , 28) + Chr(13)       '8. Zeile wählen
   Gosub Write_edip
   Inv_schalten = WPstatus(9)
   call WP_aktiv(Inv_schalten)
   waitms 20                                                'da kommt das Display scheinbar an die Grenze
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z9) + Hex(stunden(9)) + ":" + Hex(minuten(9)) + Chr(13)       '9. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(42) + Chr(z9) + Mid(ausgabe_lcd(9) , Displp_horiz , 28) + Chr(13)       '9. Zeile wählen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers ausschalten
   Gosub Write_edip
Return


WP_aktiv:
   If Inv_schalten = "1" Then                               'WP läuft
      Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)           'also auf Invers einschalten
      Gosub Write_edip
     else
      Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)           'WP läuft nicht also Invers ausschalten
      Gosub Write_edip
   End if
Return

 

'===============================================================================
'========================= 2 Zustand Funksensoren  =============================
'===============================================================================

Zustand_Funk:

   Timeout = 55                                             '55 sec Timeout
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip

   #If Printerausgabe = 1
       For v = 1 to 40
           Print hex(Funkzust(v)) ; " ";
       next
       Print
   #EndIf

   'Aufbereitung der Texte und Werte
   N = 1
   for v = 1 to 6                                           'max. 10 Temp-Empfänger möglich
      '---------------- Adresse -------------------------------
      Adr_F(v) = Funkzust(n)                                'Adresse kopieren

      '----------------- Anzeige der Stunde --------------------
      n = n + 1
      Stunden(v) = Makebcd(Funkzust(n))                     'Stunde kopieren

      '----------------- Anzeige der Minute --------------------
      n = n + 1
      Minuten(v) = Makebcd(Funkzust(n))                     'Minute kopieren

      '----------------- Anzeige der Temperatur -----------------
      n = n + 1
      TF = makeint(Funkzust(n) , Funkzust(n + 1))
      TFsingle = TF / 10
      TFTempkomma = Fusing(TFsingle , "##.#")               'Komma festlegen
      TF_Temp(v) = Format(TFtempkomma , "+0000") + Chr(248) 'Zahlenausgabe formatieren und Gradzeichen anhängen
      If TFsingle > 100 Then TF_Temp(v) = " --.- "
      If TFsingle < -100 Then TF_Temp(v) = " --.- "

      '----------------- Anzeige der Feuchte --------------------

      N = n + 2
      FF = makeint(Funkzust(n) , Funkzust(n + 1))
      FFsingle = 125 * FF
      FFsingle = FFsingle / 65536
      FFsingle = FFsingle - 6                               ' % Feuchte
      FFint = Round(FFsingle)                               'runden und in Integer wandeln
      Feuchte(v) = str(FFint) + "%"                         'in String wandeln und % anhängen
      If FFint > 100 Then Feuchte(v) = "---"
      If FFint < 0 Then Feuchte(v) = "---"

      '----------------- Anzeige der Betriebsspannung --------------------
      n = n + 2
      SF = makeint(Funkzust(n) , Funkzust(n + 1))
      Betrspgsingle = SF / 1000
      Betrspgkomma = Fusing(betrspgsingle , "#.##")         'Komma festlegen
      Betrspg(v) = Format(Betrspgkomma , "000")             'Zahlenausgabe formatieren
      If Betrspgsingle > 100 Then Betrspg(v) = " -.-"
      If Betrspgsingle < -100 Then Betrspg(v) = " -.-"
      N = N + 3                                             'Damit es wieder 10 gib
   Next v


   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "Ort    Adr Zeit  Temp.  Feu  Batt." + Chr(13)       'Kopfzeile
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(14) + Chr(240) + Chr(14)       'horiz. Gerade
   Gosub Write_edip


   Z = 1
   y = 10
   x = 15
   For v = 1 to 8                                           'max. 8 Zeilen
      if Adr_F(V) <> 0 then
         Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(x) + Fname(v) + "  " + Str(Adr_F(v)) + "  " + Hex(Stunden(v)) + ":" + Hex(Minuten(v)) + " " + TF_Temp(v) + " " + Feuchte(v) + " " + Betrspg(v) + "V" + Chr(13)
         Gosub Write_edip

         For n = z to y
            Print hex(Funkzust(n)) ; " ";
         next n
         print
         z = z + 10
         y = y + 10
      end if

      x = x + 14                                            'nächste Zeile
   next v
   Print


Zust_Funk:
   Debounce Ok , 0 , Beenden
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Beenden
   Else
      Goto Zust_Funk
   End If

Beenden:
Print "E"
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Goto Menueende


'===============================================================================
'========================= 3 Fehlerprotokoll ===================================
'===============================================================================

Fehlerprotokoll:

   Timeout = 45                                             '45 sec Timeout
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + SD_Fehler + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + Funk_Fehler + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z9) + "Mit Down loeschen" + Chr(13)
   Gosub Write_edip

Fehlerprotokoll1:
   Debounce Down , 0 , Fehler_loeschen
   Debounce Ok , 0 , Abbruch2
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Abbruch
   Else
      Goto Fehlerprotokoll1
   End If

Fehler_loeschen:
   Fehlermeldung = "       "                                'Ausgabe auf 2.ter Zeile löschen

Abbruch2:
   Goto Menueende

 

'===============================================================================
'============================ 4 SD-Karte anmelden ==============================
'===============================================================================


SD_Karte_anmelden:
   Timeout = 30                                             '30 sec Timeout

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "SD-Karte anmelden mit -> UP" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "Neues File erstellen mit -> DOWN" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "alle anderen --> Abbruch" + Chr(13)
   Gosub Write_edip

Neues_File1:
   Debounce Up , 0 , Anmelden
   Debounce Down , 0 , File_erstellen
   Debounce Links , 0 , Abbruch
   Debounce Rechts , 0 , Abbruch
   Debounce Ok , 0 , Abbruch
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Abbruch
   Else
      Goto Neues_File1
   End If

Anmelden:
   Gosub SD_Init                                            'SD-Karte initialisieren
   waitms 500
   If Sdstatus <> 0 then
      Gbuffer = Chr(27) + "ZB2" + Chr(13) + Chr(27) + "ZL" + Chr(1) + Chr(z6) + "Keine SD-Karte / schreibgesch" + chr(129) + "tzt" + Chr(13) + Chr(27) + "ZB0" + Chr(13)
      Gosub Write_edip
      Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + "Mit  OK  Abbruch oder Warten" + Chr(13)
      Gosub Write_edip
      Debounce Ok , 0 , Abbruch
      waitms 500
      goto Anmelden
     Else
      Gbuffer = Chr(27) + "RL" + Chr(1) + Chr(71) + Chr(240) + Chr(98) + Chr(13)       'Zeile 6 + 7 löschen
      Gosub Write_edip
      Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "SD-Karte initialisiert" + Chr(&H0d) + Chr(13)
      Gosub Write_edip
   End if
Goto Abbruch


File_erstellen:
   Gosub SD_Init
   waitms 500                                               'neu eingeschoben also initialisieren
   If Sdstatus <> 0 then
      Gbuffer = Chr(27) + "ZB2" + Chr(13) + Chr(27) + "ZL" + Chr(1) + Chr(z6) + "Keine SD-Karte / schreibgesch" + chr(129) + "tzt" + Chr(13) + Chr(27) + "ZB0" + Chr(13)
      Gosub Write_edip
      Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z7) + "Mit  OK  Abbruch oder Warten" + Chr(13)
      Gosub Write_edip
      Debounce Ok , 0 , Abbruch
      waitms 200
      goto File_erstellen
   End if

   Gbuffer = Chr(27) + "RL" + Chr(1) + Chr(71) + Chr(98) + Chr(240) + Chr(13)       'Zeile 6 + 7 löschen
   Gosub Write_edip
   Sdentrynames = Filename                                  'Filename
   Gosub Sdreadfsinfo                                       'SD-Karteninfos holen
   Sdcreatemode = 0                                         'Create file
   Sdstartdirclusterd = 0
   Gosub Sdcreatefileordir                                  'Find free FAT entry, find free directory entry, and save the directory entry back to the SD card
   SD_buff = "Erstellt: " + Date$ + "  " + Time$ + "        " + chr(13) + Chr(10)
   Gosub SD_write

   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "SD-Karte File ALLDATA.TXT erstellt" + Chr(13)
   Gosub Write_edip


Abbruch:
   wait 2
   Goto Menueende


'===============================================================================
'===================== 5 Festlegung Aufzeichnungsintervall =====================
'===============================================================================

Intervall_einstellen:

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip

   Intervallanzeige = Speicherintervall

Intervall_einstellen1:
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Speicherintervall:" + str(Intervallanzeige) + " Min" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(42) + Chr(240) + Chr(42)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z5) + "Mit up und down Intervall" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z6) + "einstellen und mit OK bestaetigen" + Chr(13)
   Gosub Write_edip
Intervall_einstellen2:
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Speicherintervall:" + str(Intervallanzeige) + " Min" + Chr(13)
   Gosub Write_edip

   Debounce Up , 0 , Intervall_up , Sub                     'mit up inkrementieren
   Debounce Down , 0 , Intervall_down , Sub                 'mit Down dekrementieren
   Debounce Ok , 0 , Intervalluebernahme                    'mit OK abschliessen
   waitms 50                                                '50 ms warten
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Menueende
   Else
      Goto Intervall_einstellen2                            'nur 2.Zeile neu schreiben
   End If

Intervall_up:
   Intervallanzeige = Intervallanzeige + 1                  'inkrementieren
   Timeout = 10                                             '10 sec Timeout
Return

Intervall_down:
   Intervallanzeige = Intervallanzeige - 1                  'dekrementieren
   Timeout = 10                                             '10 sec Timeout
Return

Intervalluebernahme:
   Speicherintervall = Intervallanzeige
Goto Menueende


'===============================================================================
'=============================== 6 -----    leer ===============================
'===============================================================================

Leerer_Punkt:

Goto Menueende


'===============================================================================
'========================= 7 Diverse Einstellungen =============================
'===============================================================================

Zusatzmenueauswahl:
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip

Zusatzmenueauswahl1:
   Print "Zusatzmenue1"
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "1 Helligkeit einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "2 Beleuchtungsdauer einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Zeit und Datum einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 Datenzähler zurueckstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Daten via RS232 ausgeben" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(105) + Chr(240) + Chr(105)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(107) + Chr(240) + Chr(107)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z9) + "Mit OK waehlen," + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Helligkeit_einstellen                  'mit OK zum Auslesen
   Debounce Up , 0 , ZMenue5anzeige                         'mit Up zum letzten Menue
   Debounce Down , 0 , ZMenue2anzeige                       'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop


'---------------------

ZMenue2anzeige:
   Print "Zusatzmenue2"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "1 Helligkeit einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "2 Beleuchtungsdauer einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Zeit und Datum einstellen" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Beleuchtungsdauer_einstellen           'mit OK Tag abspeichern
   Debounce Up , 0 , Zusatzmenueauswahl1                    'mit Up zum vorherigen Menue
   Debounce Down , 0 , ZMenue3anzeige                       'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

'---------------------

ZMenue3anzeige:
   Print "Zusatzmenue3"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "2 Beleuchtungsdauer einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Zeit und Datum einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 Datenzaehler zurueckstellen" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Zeit_stellen                           'mit OK neues Verzeichnis erstellen
   Debounce Up , 0 , ZMenue2anzeige                         'mit Up zum vorherigen Menue
   Debounce Down , 0 , ZMenue4anzeige                       'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop


'---------------------

ZMenue4anzeige:
   Print "Zusatzmenue4"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "3 Zeit und Datum einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 Datenzaehler zurueckstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Daten via RS232 ausgeben" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Pointer_reset                          'mit OK Datenpointer zurückstellen
   Debounce Up , 0 , ZMenue3anzeige                         'mit Up zum vorherigen Menue
   Debounce Down , 0 , ZMenue5anzeige                       'mit Down zum nächsten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop


'---------------------

ZMenue5anzeige:
   Print "Zusatzmenue5"
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z4) + "4 Datenzaehler zurueckstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(5) + Chr(13)              'Invers einschalten
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "5 Daten via RS232 ausgeben" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZV" + Chr(4) + Chr(13)              'Invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z1) + "1 Helligkeit einstellen" + Chr(13)
   Gosub Write_edip

Timeout = 20                                                'Timeout auf 20 sec setzen
Do
   Debounce Ok , 0 , Tag_abspeichern                        'mit OK Daten ausgeben
   Debounce Up , 0 , ZMenue4anzeige                         'mit Up zum vorherigen Menue
   Debounce Down , 0 , Zusatzmenueauswahl                   'mit Down ersten Menue
   If Timeout = 0 Then Goto Menueende                       'Timeout abgelaufen
Loop

 

'===============================================================================
'========================= 7.1 Helligkeit einstellen ===========================
'===============================================================================

Helligkeit_einstellen:

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip

Helligkeit_einstellen1:
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Helligkeit:" + str(Helligkeit) + "%  " + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(42) + Chr(240) + Chr(42)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z5) + "Mit up und down Helligkeit" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z6) + "einstellen und mit OK bestaetigen" + Chr(13)
   Gosub Write_edip
Helligkeit_einstellen2:
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Helligkeit:" + str(Helligkeit) + "%  " + Chr(13)
   Gosub Write_edip

   Debounce Up , 0 , Helligkeit_up , Sub                    'mit up inkrementieren
   Debounce Down , 0 , Helligkeit_down , Sub                'mit Down dekrementieren
   Debounce Ok , 0 , Menueende                              'mit OK abschliessen
   waitms 50                                                '50 ms warten
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Menueende
   Else
      Goto Helligkeit_einstellen2                           'nur 2.Zeile neu schreiben
   End If

Helligkeit_up:
   Helligkeit = Helligkeit + 1                              'inkrementieren
   Gbuffer = Chr(27) + "YH" + chr(Helligkeit)               'Helligkeit übertragen
   Gosub Write_edip
   Timeout = 10                                             '10 sec Timeout
Return

Helligkeit_down:
   Helligkeit = Helligkeit - 1                              'dekrementieren
   Gbuffer = Chr(27) + "YH" + chr(Helligkeit)               'Helligkeit übertragen
   Gosub Write_edip
   Timeout = 10                                             '10 sec Timeout
Return

Helligkeituebernahme:
'   Helligkeit = Helligkeitanzeige
Goto Menueende


'===============================================================================
'===================== 7.2 Beleuchtungsdauer einstellen ========================
'===============================================================================

Beleuchtungsdauer_einstellen:

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip

Beleuchtungsdauer_einstellen1:
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Beleuchtungsdauer:" + str(Beleuchtungsdauer) + " Sec" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(42) + Chr(240) + Chr(42)       'horiz. Gerade
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z5) + "Mit up und down Beleuchtungsdauer" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z6) + "einstellen und mit OK bestaetigen" + Chr(13)
   Gosub Write_edip
Beleuchtungsdauer_einstellen2:
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Beleuchtungsdauer:" + str(Beleuchtungsdauer) + " Sec" + Chr(13)
   Gosub Write_edip

   Debounce Up , 0 , Beleuchtungsdauer_up , Sub             'mit up inkrementieren
   Debounce Down , 0 , Beleuchtungsdauer_down , Sub         'mit Down dekrementieren
   Debounce Ok , 0 , Menueende                              'mit OK abschliessen
   waitms 50                                                '50 ms warten
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Menueende
   Else
      Goto Beleuchtungsdauer_einstellen2                    'nur 2.Zeile neu schreiben
   End If

Beleuchtungsdauer_up:
   Beleuchtungsdauer = Beleuchtungsdauer + 1                'inkrementieren
   Timeout = 10                                             '10 sec Timeout
Return

Beleuchtungsdauer_down:
   Beleuchtungsdauer = Beleuchtungsdauer - 1                'dekrementieren
   Timeout = 10                                             '10 sec Timeout
Return


'===============================================================================
'======================   7.3 Zeit und Datum stellen   =========================
'===============================================================================
'
'BEMERKUNG: Um eine Eingabe invers blinken zu lassen war es notwendig zuerst das
'komplette Datum mit Zeit zu schreiben.
'Danach wurde die zu änderne Einheit invers blinkend überschrieben.
'Um einfach hoch- und runterzählen zu können wird das normale Dezimalsystem verwendet.
'Die Darstellung des Dezimalsystems mit str(x) ergibt aber je nach Anzahl Stellen eine
'Verschiebung des restlichen Inhalts.
'Aus diesem Grund wird die zu änderne Einheit für die Darstellung in das BCD-Format gewandelt.
'Dieses belegt immer 2 Stellen; somit bleibt der Rest der Darstellung stabil.

Zeit_stellen:

   gosub GetDatumZeit                                       'Zeit aus dem RTC holen
   Timeout = 120                                            '120 sec Zeit für die Eingabe

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z1) + "Mit up, down, links und rechts" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(3) + Chr(z2) + "Zeit und Datum einstellen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z3) + "Dann mit OK uebernehmen" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "GD" + Chr(1) + Chr(42) + Chr(240) + Chr(42)       'horiz. Gerade
   Gosub Write_edip
'___________________________________


Zeit_stellen_Tag:
   Gbuffer = Chr(27) + "ZZ22" + Chr(13)                     'Zoom x 2
   Gosub Write_edip
   Gbuffer = chr(27) + "ZB0" + chr(13)                      'invers blinken aus
   gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + Date$ + Chr(13)       'Datum
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + chr(130) + chr(z6) + Time$ + Chr(13)       'Zeit
   Gosub Write_edip

  Zeit_stellen_Tag1:
   Tag(1) = makebcd(_day)                                   'zur einfacheren Darstellung; Tag(1) wird sonst nicht gebraucht
   Gbuffer = chr(27) + "ZB2" + chr(13)                      'invers blinkend ein
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + hex(Tag(1)) + chr(13)       'Tag
   gosub Write_edip

   Debounce Up , 0 , Tagplus
   Debounce Down , 0 , Tagminus
   Debounce Links , 0 , Zeit_stellen_Sec
   Debounce Rechts , 0 , Zeit_stellen_Monat
   Debounce Ok , 0 , Zeit_speichern_Ende
   If Timeout = 0 Then Goto Zeit_speichern_Ende             'Timeout abgelaufen
   Goto Zeit_stellen_Tag1

Tagplus:
   _day = _day + 1
   if _day > 31 then _day = 1
   gosub setDatum
   gosub GetDatumZeit
   goto Zeit_stellen_Tag1

Tagminus:
   _day = _day - 1
   if _day = 0 then _day = 31
   gosub setDatum
   gosub GetDatumZeit
   goto Zeit_stellen_Tag1
'____________

Zeit_stellen_Monat:
   Gbuffer = Chr(27) + "ZZ22" + Chr(13)                     'Zoom x 2
   Gosub Write_edip
   Gbuffer = chr(27) + "ZB0" + chr(13)                      'invers blinken aus
   gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + Date$ + Chr(13)       'Datum
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + chr(130) + chr(z6) + Time$ + Chr(13)       'Zeit
   Gosub Write_edip

 Zeit_stellen_Monat1:
   Monat(1) = makebcd(_month)                               'zur einfacheren Darstellung; Tag(1) wird sonst nicht gebraucht
   Gbuffer = chr(27) + "ZB2" + chr(13)                      'invers blinkend ein
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(44) + Chr(z6) + hex(Monat(1)) + chr(13)       'Monat
   gosub Write_edip

   Debounce Up , 0 , Monatplus
   Debounce Down , 0 , Monatminus
   Debounce Links , 0 , Zeit_stellen_Tag
   Debounce Rechts , 0 , Zeit_stellen_Jahr
   Debounce Ok , 0 , Zeit_speichern_Ende
   If Timeout = 0 Then Goto Zeit_speichern_Ende             'Timeout abgelaufen
   goto Zeit_stellen_Monat1

Monatplus:
   _month = _month + 1
   if _month > 12 then _month = 1
   gosub setDatum
   gosub GetDatumZeit
   goto Zeit_stellen_Monat1

Monatminus:
   _month = _month - 1
   if _month = 0 then _month = 1
   gosub setDatum
   gosub GetDatumZeit
   goto Zeit_stellen_Monat1
'_______________

Zeit_stellen_Jahr:
   Gbuffer = Chr(27) + "ZZ22" + Chr(13)                     'Zoom x 2
   Gosub Write_edip
   Gbuffer = chr(27) + "ZB0" + chr(13)                      'invers blinken aus
   gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + Date$ + Chr(13)       'Datum
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + chr(130) + chr(z6) + Time$ + Chr(13)       'Zeit
   Gosub Write_edip

Zeit_stellen_Jahr1:
   Jahr(1) = makebcd(_year)                                 'zur einfacheren Darstellung; Tag(1) wird sonst nicht gebraucht
   Gbuffer = chr(27) + "ZB2" + chr(13)                      'invers blinkend ein
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(86) + Chr(z6) + hex(Jahr(1)) + chr(13)       'Jahr
   gosub Write_edip

   Debounce Up , 0 , Jahrplus
   Debounce Down , 0 , Jahrminus
   Debounce Links , 0 , Zeit_stellen_Monat
   Debounce Rechts , 0 , Zeit_stellen_Std
   Debounce Ok , 0 , Zeit_speichern_Ende
   If Timeout = 0 Then Goto Zeit_speichern_Ende             'Timeout abgelaufen
   goto Zeit_stellen_Jahr1:

Jahrplus:
   _Year = _Year + 1
   if _Year > 99 then _Year = 0
   gosub setDatum
   gosub GetDatumZeit
   goto Zeit_stellen_Jahr1

Jahrminus:
   _Year = _Year - 1
   if _Year = 255 then _Year = 99
   gosub setDatum
   gosub GetDatumZeit
   goto Zeit_stellen_Jahr1
'__________________

Zeit_stellen_Std:
   Gbuffer = Chr(27) + "ZZ22" + Chr(13)                     'Zoom x 2
   Gosub Write_edip
   Gbuffer = chr(27) + "ZB0" + chr(13)                      'invers blinken aus
   gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + Date$ + Chr(13)       'Datum
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + chr(130) + chr(z6) + Time$ + Chr(13)       'Zeit
   Gosub Write_edip

Zeit_stellen_Std1:
   Stunden(1) = makebcd(_hour)                              'zur einfacheren Darstellung; Stunden(1) wird sonst nicht gebraucht
   Gbuffer = chr(27) + "ZB2" + chr(13)                      'invers blinkend ein
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(130) + Chr(z6) + hex(Stunden(1)) + chr(13)       'Stunden
   gosub Write_edip

   Debounce Up , 0 , Stdplus
   Debounce Down , 0 , Stdminus
   Debounce Links , 0 , Zeit_stellen_Jahr
   Debounce Rechts , 0 , Zeit_stellen_Min
   Debounce Ok , 0 , Zeit_speichern_Ende
   If Timeout = 0 Then Goto Zeit_speichern_Ende             'Timeout abgelaufen
   goto Zeit_stellen_Std1

Stdplus:
   _hour = _hour + 1
   if _hour > 23 then _hour = 0
   gosub setZeit
   gosub GetDatumZeit
   goto Zeit_stellen_Std1

Stdminus:
   _hour = _hour - 1
   if _hour = 255 then _hour = 23
   gosub setZeit
   gosub GetDatumZeit
   goto Zeit_stellen_Std1
'__________________

Zeit_stellen_Min:
   Gbuffer = Chr(27) + "ZZ22" + Chr(13)                     'Zoom x 2
   Gosub Write_edip
   Gbuffer = chr(27) + "ZB0" + chr(13)                      'invers blinken aus
   gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + Date$ + Chr(13)       'Datum
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + chr(130) + chr(z6) + Time$ + Chr(13)       'Zeit
   Gosub Write_edip

Zeit_stellen_Min1:
   Minuten(1) = makebcd(_min)                               'zur einfacheren Darstellung; Stunden(1) wird sonst nicht gebraucht
   Gbuffer = chr(27) + "ZB2" + chr(13)                      'invers blinkend ein
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(172) + Chr(z6) + hex(Minuten(1)) + chr(13)       'Minuten
   gosub Write_edip

   Debounce Up , 0 , Minplus
   Waitms 10
   Debounce Down , 0 , Minminus
   Waitms 10
   Debounce Links , 0 , Zeit_stellen_Std
   Waitms 10
   Debounce Rechts , 0 , Zeit_stellen_Sec
   Waitms 10
   Debounce Ok , 0 , Zeit_speichern_Ende
   If Timeout = 0 Then Goto Zeit_speichern_Ende             'Timeout abgelaufen
   goto Zeit_stellen_Min1

Minplus:
   _min = _min + 1
   if _min > 59 then _min = 0
   gosub setZeit
   gosub GetDatumZeit
   goto Zeit_stellen_Min1

Minminus:
   _min = _min - 1
   if _min > 59 then _min = 0
   gosub setZeit
   gosub GetDatumZeit
   goto Zeit_stellen_Min1
'_________________

Zeit_stellen_Sec:
   Gbuffer = Chr(27) + "ZZ22" + Chr(13)                     'Zoom x 2
   Gosub Write_edip
   Gbuffer = chr(27) + "ZB0" + chr(13)                      'invers blinken aus
   gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(2) + Chr(z6) + Date$ + Chr(13)       'Datum
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + chr(130) + chr(z6) + Time$ + Chr(13)       'Zeit
   Gosub Write_edip

Zeit_stellen_Sec1:
   Sekunden(1) = makebcd(_sec)                              'zur einfacheren Darstellung; Stunden(1) wird sonst nicht gebraucht
   Gbuffer = chr(27) + "ZB2" + chr(13)                      'invers blinkend ein
   Gosub Write_edip
   Gbuffer = chr(27) + "ZL" + Chr(214) + Chr(z6) + hex(Sekunden(1)) + chr(13)       'Sekunden
   gosub Write_edip

   Debounce Up , 0 , Secplus
   Debounce Down , 0 , Secminus
   Debounce Links , 0 , Zeit_stellen_Min
   Debounce Rechts , 0 , Zeit_stellen_Tag
   Debounce Ok , 0 , Zeit_speichern_Ende
   If Timeout = 0 Then Goto Zeit_speichern_Ende             'Timeout abgelaufen
   goto Zeit_stellen_Sec1

Secplus:
   _sec = _sec + 1
   if _sec > 59 then _sec = 0
   gosub setZeit
   gosub GetDatumZeit
   goto Zeit_stellen_Sec1

Secminus:
   _sec = _sec - 1
   if _sec > 59 then _sec = 0
   gosub setZeit
   gosub GetDatumZeit
   goto Zeit_stellen_Sec1


Zeit_speichern_Ende:
   Gbuffer = Chr(27) + "ZZ11" + Chr(13)                     'wieder Zoom x 1
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZB0" + Chr(13)                      'Blinken aus
   Gosub Write_edip
   gbuffer = Chr(27) + "DL" + chr(13)                       'Display löschen
   Gosub Write_edip
   Goto Menueende                                           'und zurück
'________________________________


'called from ds1307clock.lib
GetDatumZeit:
  Dim Weekday As Byte                                       'Dummy, wird nicht benötigt

  Disable Interrupts
  I2CBus = 0
  I2cinit
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address write
  I2cwbyte 0                                                ' start address in 1307

  I2crepstart                                               ' Generate start code       <<<<<<<<<<<<<<  statt Start Repstart
  I2cwbyte Ds1307r                                          ' send address read
  I2crbyte _sec , Ack
  I2crbyte _min , Ack                                       ' MINUTES
  I2crbyte _hour , Ack                                      ' Hours
  I2crbyte Weekday , Ack                                    ' Day of Week
  I2crbyte _day , Ack                                       ' Day of Month
  I2crbyte _month , Ack                                     ' Month of Year
  I2crbyte _year , Nack                                     ' Year
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
  Enable Interrupts

Print _day ; "." ; _month ; "." ; _year ; "   " ; _hour ; ":" ; _min ; ":" ; _sec       '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


Return

'(
   Dim Weekday As Byte                                      'Dummy, wird nicht benötigt

   Twi_mst_addr = Ds1307w                                   'Write Deviceaddresse für schreiben
   twi_mst_buff(1) = 0                                      'start address in 1307

   Twi_mt_cntr = 1                                          '1 Byte schreiben (Startbyte ist 0)
   Twi_mr_cntr = 0                                          'nichts zurücklesen
   Twi_mt_data = Varptr(twi_mst_buff(1))                    'Startadresse der Sendedaten
   Gosub Mst_start                                          'Adressen ins EEProm übertragen
                                                            'und nun ab gesetzter Adresse lesen
   Twi_mst_addr = Ds1307r                                   'Write Deviceaddresse für lesen
   Twi_mt_cntr = 0                                          '0 Byte senden
   Twi_mr_cntr = 7                                          '7 Byte empfangen
   Twi_mr_data = Varptr(twi_msr_buff(1))                    'Startadresse der Empfangsdaten
   Gosub Mst_start                                          'und los
   #if I2C_Anzeige = 1
      Gbuffer = Chr(27) + "ZL" + Chr(198) + Chr(14) + "GDT " + Hex(Twi_mst_flag) + Chr(13)
      Gosub Write_edip
   #EndIf

   Select Case Twi_mst_flag                                 'Ergebnis ?
      Case Twi_m_recv:                                      'abgeholt
         _sec = twi_msr_buff(1)                             'Sekunden
         _min = twi_msr_buff(2)                             'Minuten
         _hour = twi_msr_buff(3)                            'Stunden
         _Weekday = twi_msr_buff(4)                         'Wochentag
         _day = twi_msr_buff(5)                             'Tag
         _month = twi_msr_buff(6)                           'Monat
         _year = twi_msr_buff(7)                            'Jahr
      Case Else:                                            'irgendein Problem
         Print Hex(twi_mst_addr) ; " Problem 06    "
         Call Twi_show_state(twi_mst_flag)
         Print
   End Select
   Twi_mst_flag = 0
   _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
   _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
')

SetDatum:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  Disable Interrupts
  I2CBus = 0
  I2cinit
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 4                                                ' starting address in 1307
  I2cwbyte _day                                             ' Send Data to DAY
  I2cwbyte _month                                           ' MONTH
  I2cwbyte _year                                            ' YEAR
  I2cstop
  Enable Interrupts
Return

'(
   _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)

   Twi_mst_addr = Ds1307w                                   'Deviceadresse schreiben
   twi_mst_buff(1) = 4                                      'Startaddress im 1307
   twi_mst_buff(2) = _day
   twi_mst_buff(3) = _month
   twi_mst_buff(4) = _year

   Twi_mt_cntr = 4                                          '4 Byte senden
   Twi_mr_cntr = 0                                          'nichts abholen
   Twi_mt_data = Varptr(twi_mst_buff(1))                    'Startadresse des Sendepuffers
   Gosub Mst_start                                          'auf gehts
   #if I2C_Anzeige = 1
      Gbuffer = Chr(27) + "ZL" + Chr(198) + Chr(14) + "SDa " + Hex(Twi_mst_flag) + Chr(13)
      Gosub Write_edip
   #EndIf

   Select Case Twi_mst_flag                                 'Ergebnis ?
      Case Twi_m_sent:                                      'abgeholt
         Twi_mst_flag = 0
      Case Else:                                            'irgendein Problem
         Print Hex(twi_mst_addr) ; " Problem 07    "
         Call Twi_show_state(twi_mst_flag)
         Print
   End Select
   Twi_mst_flag = 0
Return
')

SetZeit:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  Disable Interrupts
  I2CBus = 0
  I2cinit
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' Send Data to SECONDS
  I2cwbyte _min                                             ' MINUTES
  I2cwbyte _hour                                            ' HOURS
  I2cstop
  Enable Interrupts
Return

'(
   _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)

   Twi_mst_addr = Ds1307w                                   'Deviceadresse schreiben
   twi_mst_buff(1) = 0                                      'Startaddress im 1307
   twi_mst_buff(2) = _sec
   twi_mst_buff(3) = _min
   twi_mst_buff(4) = _hour

   Twi_mt_cntr = 4                                          '4 Byte senden
   Twi_mr_cntr = 0                                          'nichts abholen
   Twi_mt_data = Varptr(twi_mst_buff(1))                    'Startadresse des Sendepuffers
   Gosub Mst_start                                          'auf gehts
   #if I2C_Anzeige = 1
      Gbuffer = Chr(27) + "ZL" + Chr(198) + Chr(14) + "STi " + Hex(Twi_mst_flag) + Chr(13)
      Gosub Write_edip
   #EndIf

   Select Case Twi_mst_flag                                 'Ergebnis ?
      Case Twi_m_sent:                                      'abgeholt
         Twi_mst_flag = 0
      Case Else:                                            'irgendein Problem
         Print Hex(twi_mst_addr) ; " Problem 08    "
         Call Twi_show_state(twi_mst_flag)
         Print
   End Select
   Twi_mst_flag = 0
Return
')

'===============================================================================
'========================  7.4 Datenzähler zurücksetzen   ======================
'===============================================================================
'gilt für I2C-EEProm

Pointer_reset:

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZB2" + Chr(13)                      'Text blinkt invers ein
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z2) + "Beim Ruecksetzen werden" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z3) + "alte Werte ueberschrieben" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZB0" + Chr(13)                      'Text blinkt invers aus
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(2) + Chr(z5) + "mit @ down @ bestaetigen" + Chr(13)
   Gosub Write_edip


Pointer_reset1:
   Debounce Up , 0 , Nicht_weiter
   Debounce Down , 0 , Pointer_loeschen
   Debounce Links , 0 , Nicht_weiter
   Debounce Rechts , 0 , Nicht_weiter
   Debounce Ok , 0 , Nicht_weiter
   If Timeout = 0 Then                                      'Timeout abgelaufen
      Goto Nicht_weiter
   Else
      Goto Pointer_reset1
   End If

Pointer_loeschen:
   Adresspointer = Startspeicher                            'zurücksetzen
   Gosub Write_adress_pointer                               'und ins EEProm Speichern

Nicht_weiter:
   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Goto Menueende


'===============================================================================
'=========================== 7.6 Daten ausgeben  ===============================
'===============================================================================

Dim Ausgabe_seriell As String * 109                         'Total 108 Zeichen ausgeben
Dim Ta_s(13) As String * 8                                  'Temperaturen
Dim Datenaus As Long
Dim P As Long                                               'Zählvariable

Tag_abspeichern:

   Datenaus = Anzahldatensaetze

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip


   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z2) + "Es werden alle" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z3) + "Datens" + chr(132) + "tze ausgegeben: " + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z5) + "mit OK weiter" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "alle anderen Taste --> Abbruch" + Chr(13)
   Gosub Write_edip

   'Print Datenaus
   Gbuffer = Chr(27) + "ZL" + Chr(192) + Chr(z3) + str(Datenaus) + "    " + Chr(13)
   Gosub Write_edip


   Do
      Debounce OK , 0 , RS232
      Debounce Up , 0 , Ausgabenabbruch
      Debounce Down , 0 , Ausgabenabbruch
      Debounce Links , 0 , Ausgabenabbruch
      Debounce Rechts , 0 , Ausgabenabbruch
      If Timeout = 0 Then Goto Ausgabenabbruch              'Timeout abgelaufen
   Loop

 

'__________________________________

Rs232:
   Ausleseadresse = Adresspointer - 32                      'neuester Datensatz

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z6) + "mit down kann gestoppt werden" + Chr(13)
   Gosub Write_edip
   Gbuffer = Chr(27) + "ZL" + Chr(1) + Chr(z8) + "gesendete Datensaetze: " + Chr(13)
   Gosub Write_edip

   O = 0                                                    'Zähler fürs stoppen
   For P = 1 To Datenaus                                    'Anzahl auszugebende Datensätze

      Gbuffer = Chr(27) + "ZL" + Chr(156) + Chr(z8) + "      " + Chr(13)       'Stellen löschen
      Gosub Write_edip
      Gbuffer = Chr(27) + "ZL" + Chr(156) + Chr(z8) + str(P) + Chr(13)       'Datensatznummer ausgeben
      Gosub Write_edip

      Incr O
      N = 1
      Speicheradresse = Ausleseadresse
      Gosub Read_eeprom                                     'aktuelle Werte aus Eeprom holen

      'Temperaturanzeige vorbereiten; abgelegt im Integer-Format (-32768....+32767) als Overlay über Daten_out
      For n = 1 to 13                                       'max. 13 Temperaturen möglich
         Temperatursingle(n) = Ta(n) / 10
         Tempkomma = Fusing(temperatursingle(n) , "##.#")   'Komma festlegen
         Ta_s(n) = ";" + Format(tempkomma , "+0000")        'Zahlenausgabe formatieren, ; ist Trennzeichen
         If Temperatursingle(n) > 100 Then Ta_s(n) = "; --.- "
         If Temperatursingle(n) < -100 Then Ta_s(n) = "; --.- "
      Next n                                                'nächste Temperatur im Anzeigeformat
      Jahr = Makebcd(daten_out(3))
      Monat = Makebcd(daten_out(2))
      Tag = Makebcd(daten_out(1))
      Stunden = Makebcd(daten_out(4))
      Minuten = Makebcd(daten_out(5))
      Sekunden = Makebcd(daten_out(6))
      Print Hex(tag) ; "." ; Hex(monat) ; "." ; Hex(jahr) ; ";" ; Hex(stunden) ; ":" ; Hex(minuten) ; ":" ; Hex(sekunden) ; ";" ; Chr(daten_out(7)) ; ";" ; Chr(daten_out(8)) ;
      Print Ta_s(1) ; Ta_s(2) ; Ta_s(3) ; Ta_s(4) ; Ta_s(5) ; Ta_s(6) ; Ta_s(7) ; Ta_s(8) ; Ta_s(9) ; Ta_s(10) ; Ta_s(11) ; Ta_s(12) ; Ta_s(13) ; Chr(&H0d)
      Ausleseadresse = Ausleseadresse - 32                  'ein Datensatz früher
      If O = 20 Then                                        'nach jedem 20. Datensatz auf Abbruch kontrollieren
         Debounce Down , 0 , Ausgabenabbruch                'auf Abbruch prüfen
         O = 0                                              'neue Runde
      End If
   Next P

Ausgabenabbruch:

   Gbuffer = Chr(27) + "DL" + Chr(13)                       'Display löschen
   Gosub Write_edip
   Goto Menueende

'===============================================================================