'*******************************************************************************
'************************** 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
'===============================================================================