-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGS15_ATmega328P_000_006_023_I2C.bas
2367 lines (2269 loc) · 140 KB
/
GS15_ATmega328P_000_006_023_I2C.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
$regfile = "m328pdef.dat"
'$crystal = 7372800 ' Baudrate used crystal frequency
'$crystal = 7375258 ' after measuring deviation: +6s/5h
'$crystal = 7375551 ' after measuring deviation: +3s/21h
'$crystal = 7375496 ' after measuring deviation: -1s/37h
'$crystal = 7375476 ' after measuring deviation: -1s/103h
'$crystal = 7375616 ' after measuring deviation: +2s/26h
$crystal = 7375582 ' after measuring deviation: -2s/120h
$hwstack = 128
$swstack = 128
$framesize = 128
$baud = 38400 ' Baudrate UART 38400
$version 0 , 6 , 24
'LCD Samsung KS0066 20x4
Config Lcdpin = Pin , Rs = Portd.7 , E = Portb.0 , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4
Config Lcd = 20 * 4
Initlcd
Cursor Off Noblink
'Benutzerdefinierte Zeichen
Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32 ' ° (Grad Celcius)
Deflcdchar 1 , 4 , 4 , 14 , 14 , 4 , 4 , 14 , 31 ' DCF77 OK
Cls ' It is important that a CLS follows the DEFLCDCHAR statement(s)
Gosub Lcd_info ' Anzeige Infotext
Wait 3
'we use the TWI pins of the Mega328P
$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI
Config Scl = Portc.5 ' we need to provide the SCL pin name
Config Sda = Portc.4 ' we need to provide the SDA pin name
Config Twi = 100000
I2cinit
'Timer 0 für Torzeit Freqenzmessung
Config Timer0 = Timer , Prescale = 1024 ' Timer 0 Torzeit für Frequenzzähler
On Timer0 Tmr0_isr ' ISR
Enable Timer0 : Stop Timer0
Dim Tmr0_preload As Byte
'Timer 1 als Frequenzzähler für Messung Frequenz LCO, SRCO und TRCO (Anschluss PORTD.5 - T1)
Config Timer1 = Counter , Edge = Rising ' Timer 1 als Zähler
Enable Timer1 : Stop Timer1
'Timer 2 für Rückstellen LED
Config Timer2 = Timer , Prescale = 1024 ' Timer 2 Rückstellen LED
On Timer2 Tmr2_isr ' ISR alle 35,555 mSec
Enable Timer2 : Stop Timer2
'LED
Config Portd.6 = Output : Led_rt Alias Portd.6 ' LED rot
Config Portb.5 = Output : Led_bl Alias Portb.5 ' LED blau
Dim Led_count As Byte ' Zähler für Einschaltdauer LED
Dim Led_an As Byte ' Einschaltdauer LED
'Taster
Config Pinc.0 = Input : Portc.0 = 1 ' Taster oben, Pullup ein
Config Pinc.1 = Input : Portc.1 = 1 ' Taster links, Pullup ein
Config Pinc.2 = Input : Portc.2 = 1 ' Taster rechts, Pullup ein
Config Pinc.3 = Input : Portc.3 = 1 ' Taster unten, Pullup ein
'Piezo
Config Portd.2 = Output : Piezo Alias Portd.2 ' Piezo-Summer
Dim Sound_dist As Byte ' Tonausgabe bei Störung ein/aus
Dim Sound_dist_eep As Eram Byte ' Tonausgabe bei Störung EEPROM
Sound_dist = Sound_dist_eep
If Sound_dist >= 2 Then ' Fehler abfangen
Sound_dist = 1 : Sound_dist_eep = 1 ' Startwert Tonausgabe ein
End If
Dim Sound_light As Byte ' Tonausgabe bei Blitzen ein/aus
Dim Sound_light_eep As Eram Byte ' Tonausgabe bei Blitzen EEPROM
Sound_light = Sound_light_eep
If Sound_light >= 2 Then ' Fehler abfangen
Sound_light = 1 : Sound_light_eep = 1 ' Startwert Tonausgabe ein
End If
'serielle Schnittstelle
Dim Ser_ausgabe As Byte ' Ausgabe seriell ein/aus
Dim Ser_ausgabe_eep As Eram Byte ' Ausgabe seriell EEPROM
Ser_ausgabe = Ser_ausgabe_eep
If Ser_ausgabe >= 2 Then ' Fehler abfangen
Ser_ausgabe = 1 : Ser_ausgabe_eep = 1 ' Startwert Ausgabe ein
End If
Dim Ser_baudindex As Byte ' Geschwindigkeit serielle Ausgabe
Dim Ser_baudindex_eep As Eram Byte ' Geschwindigkeit serielle Ausgabe EEPROM
Ser_baudindex = Ser_baudindex_eep
If Ser_baudindex >= 9 Then ' Fehler abfangen
Ser_baudindex = 4 : Ser_baudindex_eep = 4 ' Startwert Geschwindigkeit seriell 38400
End If
Gosub Ser_set_baud ' Einstellung Übertragungsrate serielle Schnittstelle
Dim Rxchar_uart As Byte ' Keyboard data
Dim Rxstr_uart As String * 35 ' empfangener String
Dim Rxary_uart(6) As String * 15 ' empfangener String gesplittet
Dim Rxspl_uart As Byte ' Anzahl Teilstrings
On Urxc Int_rx_uart ' define serial receive ISR
Enable Urxc ' enable Serial RX complete interrupt
'AS3935 Lightning Sensor
Const As3935_adr_w = &H06 ' Device Address for write
Const As3935_adr_r = &H07 ' Device Address for read
Config Pind.5 = Input : As3935int Alias Pind.5 ' Interrupt vom AS3935
Pcmsk2 = &B00100000 ' Pin-CHange-Interrupt 2 Bit 5
Enable Pcint2 : On Pcint2 Pcint2_int
Dim As3935_r0x00 As Byte ' Register 00
Dim As3935_r0x01 As Byte ' Register 01
Dim As3935_r0x02 As Byte ' Register 02
Dim As3935_r0x03 As Byte ' Register 03
Dim As3935_r0x04 As Byte ' Register 04
Dim As3935_r0x05 As Byte ' Register 05
Dim As3935_r0x06 As Byte ' Register 06
Dim As3935_r0x07 As Byte ' Register 07
Dim As3935_r0x08 As Byte ' Register 08
Dim As3935_r0x3a As Byte ' Register 3A
Dim As3935_r0x3b As Byte ' Register 3B
Dim As3935_reg As Byte ' Register Adresse
Dim As3935_data As Byte ' Daten
Dim As3935_afe_gb As Byte ' AFE Gain Boost
Dim As3935_pwd As Byte ' Power-down
Dim As3935_nf_lev As Byte ' Noise Floor Level
Dim As3935_wdth As Byte ' Watchdog threshold
Dim As3935_cl_stat As Byte ' Clear statistics
Dim As3935_min_num_ligh As Byte ' Minimum number of lightning
Dim As3935_srej As Byte ' Spike rejection
Dim As3935_lco_fdiv As Byte ' Frequency division ration for antenna tuning
Dim As3935_int As Byte ' Interrupt
Dim As3935_mask_dist As Byte ' Mask Disturber
Dim As3935_s_lig As Dword ' Energy of the Single Lightning
Dim As3935_distance As Byte ' Distance estimation
As3935_distance = 63
Dim As3935_tun_cap As Byte ' Internal Tuning Capacitors (from 0 to 120pf In Steps Of 8pf)
Dim As3935_afe_gb_eep As Eram Byte ' AFE Gain Boost EEPROM
Dim As3935_nf_lev_eep As Eram Byte ' Noise Floor Level EEPROM
Dim As3935_wdth_eep As Eram Byte ' Watchdog threshold EEPROM
Dim As3935_min_num_ligh_eep As Eram Byte ' Minimum number of lightning EEPROM
Dim As3935_srej_eep As Eram Byte ' Spike rejection EEPROM
Dim As3935_mask_dist_eep As Eram Byte ' Mask Disturber EEPROM
Dim Disturber As Word ' Zähler Störungen gesamt
Dim Disturber_m(60) As Word ' Array Zähler Störungen pro Minute
Dim Lightning As Word ' Zähler Blitze
Dim Lightning_tx As Word ' Zähler Blitze senden via TX433
Dim Interrupt As Byte ' Interrupt ausgelöst
Dim Distance_tx As Word ' Distance estimation to send via TX433
Distance_tx = 63
Dim Energie_tx As Dword ' Energy to send via TX433
Dim Gewitter_zeiger As Byte ' Zeiger für aktuelles Gewitter
Dim Gewitter_zeiger_eep As Eram Byte ' Zeiger für aktuelles Gewitter EEPROM
Gewitter_zeiger = Gewitter_zeiger_eep ' Zeiger laden
If Gewitter_zeiger >= 36 Then : Gewitter_zeiger = 2 : End If ' unsinnige Werte abfangen
Dim Gewitter_dauer_s As Long ' Dauer Gewitter
Dim Gewitter_dauer_m As Word ' Dauer Gewitter
Dim Gewitter_alter As Word ' Alter Gewitter
Dim Gewitter_dauer_eep(35) As Eram Word ' Dauer Gewitter EEPROM
Dim Gewitter_blitze_eep(35) As Eram Word ' Anzahl Blitze EEPROM
Dim Gewitter_syssec_eep(35) As Eram Long ' Datum und Uhrzeit Gewitter EEPROM
Dim Timestamp_blitz_1 As Long ' Zeitstempel erster Blitz
Dim Timestamp_blitz_last As Long ' Zeitstempel letzter Blitz
'DS1621 Thermometer
Const Ds1621_adr_w = &H90 ' Address of DS1621 Thermometer for write
Const Ds1621_adr_r = &H91 ' Address of DS1621 Thermometer for read
Dim Ds_lsb As Byte ' LSB DS1621
Dim Ds_msb As Byte ' MSB DS1621
Dim C_p_c As Byte ' Count per C - Read Slope [A9h]
Dim C_r As Byte ' Count Remain - Read Counter [A8h]
Dim Temperatur As Integer ' Temperatur
'************************* Variablen TX 433 MHz ********************************
Config Portd.4 = Output : Tx433 Alias Portd.4 ' LED rot
Dim Tx_dbl As Double ' 64 Bit Sendepuffer
Dim Tx_bit As Byte ' zu sendendes Bit
Dim Tx_bit_nr As Byte ' Nummer zu sendendes Bit
Dim Tx_byte As Byte ' zu sendendes Byte
Dim Tx_byte_nr As Byte ' Nummer zu sendendes Byte
Dim Check As Byte ' Prüfsumme XOR Typ bis Check muss 0 ergeben
Dim Ersumme As Byte ' Prüfsumme errechnet
Dim Potenz As Byte ' Faktor
Dim S_adresse As Byte ' Sensoradresse
S_adresse = 4 ' höchste Adresse bei 3 zu sendenden Werten (0, 2 , 4)
Dim Tx_sek As Byte ' Zähler Sekunden Messwerte senden
Dim Tx_abstand As Byte ' Abstand des Sendens der Sensorwerte
Tx_abstand = S_adresse / 2
Tx_abstand = 157 - Tx_abstand ' Abstand des Sendens der Sensorwerte
'Tx_abstand = 5
'Variablen für Menu
Dim Menu As Byte : Menu = 1 ' Menunummer
Dim Menu_old As Byte
Dim Menubeginn As Byte ' erster Menupunkt
Dim Menuende As Byte ' letzter Menupunkt
Dim Menuback As Byte ' übergeordneter Menupunkt
Dim Menuverlassen As Byte ' Zähler um ins Hauptmenu zurück zu springen
Dim Menunext As Byte ' übergeordneter Menupunkt
Dim Wertmax As Word ' maximal einstellbarer Wert
Dim Wert As Word ' Wert hoch/runter
Dim Wertrefresh As Byte
'Variablen für Ereignisspeicher
Const Ereignis_max = 21
Dim Ereignis As Byte ' Ereignis
Ereignis = 1 ' Neustart
Dim Esp_zusatz_1 As Byte ' Ereignis Zusatz 1
Esp_zusatz_1 = 255 ' Ereignis Zusatz 1 zurück setzen
Dim Esp_zusatz_2 As Byte ' Ereignis Zusatz 2
Esp_zusatz_2 = 255 ' Ereignis Zusatz 2 zurück setzen
Dim Esp_zeiger As Byte ' Zeiger für aktuelles Ereignis
Dim Esp_zeiger_eep As Eram Byte ' Zeiger für aktuelles Ereignis EEPROM
Esp_zeiger = Esp_zeiger_eep ' Zeiger laden
If Esp_zeiger >= 101 Then : Esp_zeiger = 2 : End If ' unsinnige Werte abfangen
Dim Ereignis_eep(100) As Eram Byte ' Ereignis EEPROM
Dim Esp_zusatz_1_eep(100) As Eram Byte ' Ereignis Zusatz 1 EEPROM
Dim Esp_zusatz_2_eep(100) As Eram Byte ' Ereignis Zusatz 2 EEPROM
Dim Ereignis_syssec_eep(100) As Eram Long ' Datum und Uhrzeit Ereignis EEPROM
'Variablen temporär
Dim X As Byte , Y As Byte , Z As Byte ' temporär
Dim X1 As Byte , Y1 As Byte , Z1 As Byte ' temporär
Dim D As Dword ' temporär
Dim W As Word , W1 As Word , W2 As Word ' temporär
Dim I As Integer , I1 As Integer ' temporär
Dim I_low As Byte At I Overlay : Dim I_high As Byte At I + 1 Overlay
Dim L As Long ' temporär
Dim Ar(8) As Byte ' temporär
Dim Str8 As String * 8 ' temporär
Dim Str10 As String * 10 ' temporär
Dim Str20 As String * 20 ' temporär
If Ser_ausgabe = 1 Then ' serielle Ausgabe eingeschaltet
Print "__________________________________"
Print "I2C-Bus Scan Start"
End If
For X = 0 To 254 Step 2 ' for all odd addresses
I2cstart ' send start
I2cwbyte X ' send address
If Err = 0 Then ' we got an ack
Incr Y
If Ser_ausgabe = 1 Then ' serielle Ausgabe eingeschaltet
Print "I2C-Slave: " ; Y ; " hex: " ; Hex(x) ; " bin: " ; Bin(x)
End If
End If
I2cstop ' free bus
Next
If Ser_ausgabe = 1 Then ' serielle Ausgabe eingeschaltet
If Y = 0 Then
Print "I2C-Slave not found!"
Else
Print "I2C found " ; Y ; " Slave"
End If
Print "I2C-Bus Scan Complete"
End If
Enable Interrupts
'AS3935 Initialisierung
Gosub As3935_ld_default ' Load Default Preset
Gosub As3935_cal_lco ' LCO Calibration Start
Gosub As3935_cal_rco ' RCO Calibration Start
Gosub As3935_rd_trco ' Calibration of TRCO auslesen
Gosub As3935_rd_srco ' Calibration of SRCO auslesen
Gosub As3935_ld_settings ' Benutzereinstellungen laden
'Gosub As3935_clear_statistics ' clear the statistics by toggling the bit (high-low-high)
'Gosub As3935_rd_pwd ' Power-down lesen
Gosub As3935_rd_cl_stat ' Clear statistics lesen
Gosub As3935_rd_lco_fdiv ' Frequency division ration for antenna tuning lesen
Gosub As3935_rd_s_lig ' Energy of the Single Lightning lesen
Gosub As3935_rd_distance ' Distance estimation lesen
Gosub As3935_rd_regall ' alle Register auslesen
'Gosub As3935_rd_reg_look ' Lightning Detection Look-up table auslesen
'DCF77, Check bestens, Update täglich 1 Uhr, erster 16-bit-Timer
Config Dcf77 = Pind.3 , Timer = 1 , Check = 2 , Update = 2 , Updatetime = 4 , Timer1sec = 1
'Config Dcf77 = Pind.3 , Timer = 1 , Check = 2 , Update = 1 , Updatetime = 1 , Timer1sec = 1
'Config Dcf77 = Pind.3 , Timer = 1 , Check = 2 , Timer1sec = 1
Config Date = Dmy , Separator = . ' deutsches Datumsformat
Dim Sec_old As Byte ' vergangene Sekunde
Dim Sec_old1 As Byte ' vergangene Sekunde
Dim Wt As Byte ' Wochentag
Dim Dst As Byte ' daylight saving time Automatik ein oder aus
Dim Dst_eram As Eram Byte ' daylight saving time Automatik ein oder aus im EEPROM
Dst = Dst_eram ' lese Einstellung daylight saving time Automatik aus EEPROM
If Dst >= 3 Then : Dst = 0 : Dst_eram = 0 : End If ' Fehler abfangen (0 - Automatik aus, 1 - Winterzeit, 2 - Sommerzeit)
'DS1307 Clock
Const Ds1307_adr_w = &HD0 ' Address of Ds1307 Clock for write
Const Ds1307_adr_r = &HD1 ' Address of Ds1307 Clock for read
Dim Bday As Byte , Bmonth As Byte , Byear As Byte
'Datum und Uhrzeit aus DS1307 laden
Gosub Ds1307_rd_datetime ' Datum und Uhrzeit aus DS1307 laden
'Temperatur messen
I2cstart
If Err = 1 Then : Ereignis = 21 : Esp_zusatz_1 = 255 : End If ' "I2C-Bus Fehler"
I2cwbyte Ds1621_adr_w ' Address of DS1621 Thermometer for write
If Err = 1 Then : Ereignis = 21 : Esp_zusatz_1 = 255 : End If ' "I2C-Bus Fehler"
I2cwbyte &HEE ' Temperaturmessung starten
If Err = 1 Then : Ereignis = 21 : Esp_zusatz_1 = 255 : End If ' "I2C-Bus Fehler"
I2cstop
If Err = 1 Then : Ereignis = 21 : Esp_zusatz_1 = 255 : End If ' "I2C-Bus Fehler"
Waitms 750 ' Temperature Conversion Time
Gosub Ds1621_read ' Werte auslesen und umrechnen
Menuverlassen = 1
'#################### H a u p t p r o g r a m m ####################
Do
'Tastaturabfrage
Debounce Pinc.0 , 0 , Taste_o , Sub ' Taster oben
Debounce Pinc.1 , 0 , Taste_l , Sub ' Taster links
Debounce Pinc.2 , 0 , Taste_r , Sub ' Taster rechts
Debounce Pinc.3 , 0 , Taste_u , Sub ' Taster unten
Select Case Menu
Case 1 ' Hauptmenu
If Menu <> Menu_old Then
Menu_old = Menu
Menunext = 10
Menuback = 0
Menubeginn = 1
Menuende = 7
Cursor Off Noblink : Cls ' Anzeige löschen
End If
If Sec_old <> _sec Then ' einmal pro Sekunde ausführen
Sec_old = _sec
Wt = Dayofweek() ' Wochentag Zahl ermitteln
Str10 = Lookupstr(wt , Wochentag) ' Wochentag String laden
X = Len(str10) : Y = 20 - X : Z = Y / 2 ' Ausgabeposition zentriert
Str20 = Space(z) ' Leerzeichen vorn
Str20 = Str20 + Str10 ' String anhängen
X = Y - Z : Str20 = Str20 + Space(x) ' Leerzeichen hinten
Upperline : Lcd Str20 ' 1. Zeile Wochentag
If Dcf_status.4 = 1 Then ' This Bit indicated that the DCF-Part is stopped
Locate 1 , 20 : Lcd Chr(1) ' DCF77-Symbol anzeigen
End If
W = _year + 2000 ' 4-stellig
Locate 2 , 6 : Lcd Left(date$ , 6) ; W ' 2. Zeile Datum Jahr 4-stellig
Locate 3 , 5 : Lcd Time$ ; " Uhr" ' 3. Zeile Uhrzeit
Str8 = Str(temperatur) ' Temperatur übernehmen
Str10 = Format(str8 , "0.0") ' String formatieren
Str10 = Str10 + "{008}C" ' °C anhängen ( "{000}C" funktioniert nicht)
X = Len(str10) : Y = 20 - X : Z = Y / 2 ' Ausgabeposition zentriert
Str20 = Space(z) ' Leerzeichen vorn
Str20 = Str20 + Str10 ' String anhängen
X = Y - Z : Str20 = Str20 + Space(x) ' Leerzeichen hinten
Fourthline : Lcd Str20 ' 4. Zeile Temperatur
'einmal pro Minute ausführen
Select Case _sec
'Case 29 ' ########## Sekunde 29 ##########
' Gosub Ds1621_mess ' DS1621 zum Temperaturmessen veranlassen
Case 30 ' ########## Sekunde 30 ##########
Gosub Ds1621_read ' DS1621 Temperatur auslesen
End Select
End If
Case 10 ' Einstellung Datum Tag
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 1 ' vorhergehender Menupunkt
Menunext = 11 ' nächster Menupunkt
Wertmax = 30 ' höchster Wert für aktuelle Einstellung
Wert = _day - 1 ' Wert übernehmen
Cursor On Noblink : Cls ' Anzeige löschen
Locate 1 , 5 : Lcd "Einstellung" ' 1. Zeile Überschrift
Locate 2 , 7 : Lcd " Datum " ' 2. Zeile
W = _year + 2000 ' Jahr 4-stellig
Locate 3 , 6 : Lcd Left(date$ , 6) ; W ' 3. Zeile Datum Jahr 4-stellig
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
_day = Wert + 1 ' Wert übernehmen
Str10 = Str(_day)
Locate 3 , 6 : Lcd Format(str10 , "00") ' 4. Zeile
Locate 3 , 7 ' Cursor anzeigen
Gosub Ds1307_wr_datetime ' Datum und Uhrzeit in DS1307 schreiben
End If
Case 11 ' Einstellung Datum Monat
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 10 ' vorhergehender Menupunkt
Menunext = 12 ' nächster Menupunkt
Wertmax = 11 ' höchster Wert für aktuelle Einstellung
Wert = _month - 1 ' Wert übernehmen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
_month = Wert + 1 ' Wert übernehmen
Str10 = Str(_month)
Locate 3 , 9 : Lcd Format(str10 , "00") ' 4. Zeile
Locate 3 , 10 ' Cursor anzeigen
Gosub Ds1307_wr_datetime ' Datum und Uhrzeit in DS1307 schreiben
End If
Case 12 ' Einstellung Datum Jahr
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 11 ' vorhergehender Menupunkt
Menunext = 13 ' nächster Menupunkt
Wertmax = 99 ' höchster Wert für aktuelle Einstellung
Wert = _year ' Wert übernehmen
Locate 2 , 7 : Lcd " Datum " ' 2. Zeile
Locate 3 , 5 : Lcd " " ; ' 3. Zeile
Str10 = Str(_day) : Lcd Format(str10 , "00") ; "."; ' 3. Zeile Tag
Str10 = Str(_month) : Lcd Format(str10 , "00") ; "."; ' 3. Zeile Monat
W = _year + 2000 ' Jahr 4-stellig
Lcd W ; " " ' 3. Zeile Jahr 4-stellig
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
_year = Wert ' Wert übernehmen
Str10 = Str(_year)
Locate 3 , 14 : Lcd Format(str10 , "00") ' 4. Zeile
Locate 3 , 15 ' Cursor anzeigen
Gosub Ds1307_wr_datetime ' Datum und Uhrzeit in DS1307 schreiben
End If
Case 13 ' Einstellung Uhrzeit Stunde
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 12 ' vorhergehender Menupunkt
Menunext = 14 ' nächster Menupunkt
Wertmax = 23 ' höchster Wert für aktuelle Einstellung
Wert = _hour ' Wert übernehmen
Locate 2 , 7 : Lcd "Uhrzeit" ' 2. Zeile
Locate 3 , 4 : Lcd " " ; Time$ ; " Uhr" ' 3. Zeile Datum
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
_hour = Wert ' Wert übernehmen
Str10 = Str(_hour)
Locate 3 , 5 : Lcd Format(str10 , "00") ' 4. Zeile
Locate 3 , 6 ' Cursor anzeigen
Gosub Ds1307_wr_datetime ' Datum und Uhrzeit in DS1307 schreiben
End If
Case 14 ' Einstellung Uhrzeit Minute
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 13 ' vorhergehender Menupunkt
Menunext = 15 ' nächster Menupunkt
Wertmax = 59 ' höchster Wert für aktuelle Einstellung
Wert = _min ' Wert übernehmen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
_min = Wert ' Wert übernehmen
Str10 = Str(_min)
Locate 3 , 8 : Lcd Format(str10 , "00") ' 4. Zeile
Locate 3 , 9 ' Cursor anzeigen
Gosub Ds1307_wr_datetime ' Datum und Uhrzeit in DS1307 schreiben
End If
Case 15 ' Einstellung Uhrzeit Sekunde
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 14 ' vorhergehender Menupunkt
Menunext = 16 ' nächster Menupunkt
Wertmax = 59 ' höchster Wert für aktuelle Einstellung
Wert = _sec ' Wert übernehmen
Locate 2 , 2 : Lcd " Uhrzeit " ' 2. Zeile
Locate 3 , 2 : Lcd " " ; Time$ ; " Uhr " ' 3. Zeile Uhrzeit
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
_sec = Wert ' Wert übernehmen
Str10 = Str(_sec)
Locate 3 , 11 : Lcd Format(str10 , "00") ' 3. Zeile
Locate 3 , 12 ' Cursor anzeigen
Gosub Ds1307_wr_datetime ' Datum und Uhrzeit in DS1307 schreiben
End If
Case 16 ' Einstellung Sommer-/Winterzeit
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 15 ' vorhergehender Menupunkt
Menunext = 1 ' nächster Menupunkt
Wertmax = 2 ' höchster Wert für aktuelle Einstellung
Wert = Dst ' Wert übernehmen
Locate 2 , 2 : Lcd "Sommer-/Winterzeit" ' 2. Zeile
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Dst = Wert ' Wert übernehmen
Select Case Dst
Case 0 ' Automatik aus
Locate 3 , 4 : Lcd "Automatik aus" ' 3. Zeile
Locate 3 , 4 ' Cursorposition
Case 1 ' Winterzeit
Locate 3 , 4 : Lcd " Winterzeit " ' 3. Zeile
Locate 3 , 6 ' Cursorposition
Case 2 ' Sommerzeit
Locate 3 , 4 : Lcd " Sommerzeit " ' 3. Zeile
Locate 3 , 6 ' Cursorposition
End Select
If Dst <> Dst_eram Then
Dst_eram = Dst ' Einstellung speichern
End If
End If
Case 2 ' Gewitter
If Menu <> Menu_old Then
Menu_old = Menu
Menuverlassen = 60
Menunext = 20
Cursor Off Noblink : Cls ' Anzeige löschen
Locate 1 , 7 : Lcd "Gewitter" ' 1. Zeile Überschrift
Lowerline : Lcd "Distanz: " ' 2. Zeile
If As3935_distance < 63 Then
Lcd As3935_distance ; " km " ' 2. Zeile
End If
Thirdline : Lcd "Energie: " ; As3935_s_lig ' 3. Zeile
Fourthline : Lcd "Blitze: " ; Lightning ' 4. Zeile
End If
If As3935_int = &B00001000 Then ' Lightning interrupt
As3935_int = 0
Menuverlassen = 60
Locate 2 , 10 : Lcd As3935_distance ; " km " ' 2. Zeile Entfernung
Locate 3 , 10 : Lcd Space(7) ' 3. Zeile löschen
Locate 3 , 10 : Lcd As3935_s_lig ' 3. Zeile Energie
Locate 4 , 10 : Lcd Lightning ' 4. Zeile Anzahl Blitze
End If
Case 20 ' Speicher Gewitter anzeigen
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 2 ' vorhergehender Menupunkt
Menunext = 2 ' nächster Menupunkt
Wertmax = 34 ' 0-34 (1-35) höchster Wert für Speicher
Wert = 0
Cursor On Noblink : Cls ' Cursor ein blinkend
Locate 1 , 5 : Lcd "Gewitter:" ' 1. Zeile Überschrift
Thirdline : Lcd "Dauer:" ' 3. Zeile
Fourthline : Lcd "Anzahl Blitze:" ' 4. Zeile
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Locate 1 , 15 : X = Wert + 1 : Lcd X ; " " ' Gewitter-Nummer 1-30 anzeigen
Y = X + Gewitter_zeiger : Decr Y
If Y >= 36 Then ' max. 35 Einträge
Y = Y - 35
End If
L = Gewitter_syssec_eep(y) ' Systemsekunden übernehmen
Bday = Date(l)
If Byear >= 15 Then
Str10 = Date(l) ' Datum Ereigins übernehmen
Str8 = Left(str10 , 6) ' Tag und Monat übernehmen
Lowerline : Lcd Str8 ; "20" ' 2. Zeile Datum
Str8 = Right(str10 , 2) : Lcd Str8 ' Jahr übernehmen und anzeigen
Locate 2 , 13 : Lcd Time(l) ' 2. Zeile Uhrzeit
Else
Lowerline : Lcd Space(20)
End If
If Byear >= 15 Then
W = Gewitter_dauer_eep(y)
Locate 3 , 16 : Lcd " " ' 3. Zeile letzte Zeichen löschen
Locate 3 , 8 : Lcd W ; ' 3. Zeile Dauer Gewitter
If W = 1 Then
Lcd " Minute"
Else
Lcd " Minuten"
End If
Else ' 3. Zeile
Locate 3 , 8 : Lcd Space(13) ' 3. Zeile letzte Zeichen löschen
End If
If Byear >= 15 Then
W = Gewitter_blitze_eep(y)
Locate 4 , 16 : Lcd W ; Space(4) ' 4. Zeile Anzahl Blitze Gewitter
Else
Locate 4 , 16 : Lcd Space(5) ' 4. Zeile letzte Zeichen löschen
End If
If X < 10 Then
Locate 1 , 15 ' Cursor anzeigen
Else
Locate 1 , 16 ' Cursor anzeigen
End If
End If
Case 3 ' Störungen
If Menu <> Menu_old Then
Menu_old = Menu
Menuverlassen = 60
Menunext = 3
Cls ' Anzeige löschen
X = 0 : D = 0
Do
Incr X
D = D + Disturber_m(x) ' Störungen pro Minute addieren
Loop Until X >= 60
Locate 1 , 6 : Lcd "St{239}rungen" ' 1. Zeile Überschrift
Lowerline : Lcd "letzte Stunde: " ; D ' 2. Zeile
Thirdline : Lcd "Heute gesamt: " ; Disturber ' 3. Zeile
End If
If As3935_int = &B00000100 Then ' Disturber detected
As3935_int = 0
Menuverlassen = 30
X = 0 : D = 0
Do
Incr X
D = D + Disturber_m(x) ' Störungen pro Minute addieren
Loop Until X >= 60
Locate 2 , 16 : Lcd D ' 2. Zeile
Locate 3 , 16 : Lcd Disturber ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If As3935_int = &B00000001 Then ' Noise level too high
As3935_int = 0
Menuverlassen = 30
Fourthline : Lcd "Noise Floor too high" ' 4. Zeile
End If
Case 4 ' Einstellungen Sensor
If Menu <> Menu_old Then
Menu_old = Menu
Menuverlassen = 30
Menunext = 40
Cursor Off Noblink : Cls ' Anzeige löschen
Locate 1 , 4 : Lcd "Einstellungen" ' 1. Zeile Überschrift
Locate 2 , 4 : Lcd "Sensor AS3935" ' 2. Zeile
End If
Case 40 ' Einstellung AFE Gain Boost
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 4 ' vorhergehender Menupunkt
Menunext = 41 ' nächster Menupunkt
Wertmax = 31 ' höchster Wert für aktuelle Einstellung
Wert = As3935_afe_gb
Cursor On Noblink ' Cursor ein blinkend
Thirdline : Lcd "AFE Gain Boost: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Fourthline : Lcd Space(20) ' 4. Zeile löschen
As3935_afe_gb = Wert
If As3935_afe_gb = 14 Then ' outdoor
Locate 4 , 6
Lcd As3935_afe_gb ; " outdoor" ' 4.Zeile
Locate 4 , 7 ' Cursorposition
Elseif As3935_afe_gb = 18 Then ' indoor
Locate 4 , 7
Lcd As3935_afe_gb ; " indoor" ' 4.Zeile
Locate 4 , 8 ' Cursorposition
Else '
Locate 4 , 10 : Lcd As3935_afe_gb ' 4.Zeile
If As3935_afe_gb < 10 Then
Locate 4 , 10 ' Cursorposition
Else
Locate 4 , 11 ' Cursorposition
End If
End If
If As3935_afe_gb <> As3935_afe_gb_eep Then
As3935_afe_gb_eep = As3935_afe_gb ' Einstellung speichern
Gosub As3935_wr_afe_gb ' AFE Gain Boost schreiben
Ereignis = 2 ' Set AFE_GB
End If
End If
Case 41 ' Einstellung Noise Floor Level
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 40 ' vorhergehender Menupunkt
Menunext = 42 ' nächster Menupunkt
Wertmax = 7 ' höchster Wert für aktuelle Einstellung
Wert = As3935_nf_lev ' Wert übernehmen
Thirdline : Lcd "Noise Floor Level: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
As3935_nf_lev = Wert ' Wert übernehmen
Locate 4 , 10 : Lcd As3935_nf_lev ' 4.Zeile
Locate 4 , 10 ' Cursor anzeigen
If As3935_nf_lev <> As3935_nf_lev_eep Then
As3935_nf_lev_eep = As3935_nf_lev ' Einstellung speichern
Gosub As3935_wr_nf_lev ' Noise Floor Level schreiben
Ereignis = 3 ' Set NF_LEVEL
End If
End If
Case 42 ' Einstellung Watchdog Threshold
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 41 ' vorhergehender Menupunkt
Menunext = 43 ' nächster Menupunkt
Wertmax = 15 ' höchster Wert für aktuelle Einstellung
Wert = As3935_wdth ' Wert übernehmen
Thirdline : Lcd "Watchdog Threshold: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
As3935_wdth = Wert ' Wert übernehmen
Locate 4 , 10 : Lcd As3935_wdth ; " " ' 4.Zeile
If As3935_wdth < 10 Then
Locate 4 , 10 ' Cursor anzeigen
Else
Locate 4 , 11 ' Cursor anzeigen
End If
If As3935_wdth <> As3935_wdth_eep Then
As3935_wdth_eep = As3935_wdth ' Einstellung speichern
Gosub As3935_wr_wdth ' Watchdog Threshold schreiben
Ereignis = 5 ' Set WD_TRESHOLD
End If
End If
Case 43 ' Einstellung Spike rejection
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 42 ' vorhergehender Menupunkt
Menunext = 44 ' nächster Menupunkt
Wertmax = 15 ' höchster Wert für aktuelle Einstellung
Wert = As3935_srej ' Wert übernehmen
Thirdline : Lcd "Spike Rejection: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
As3935_srej = Wert ' Wert übernehmen
Locate 4 , 10 : Lcd As3935_srej ; " " ' 4.Zeile
If As3935_srej < 10 Then
Locate 4 , 10 ' Cursor anzeigen
Else
Locate 4 , 11 ' Cursor anzeigen
End If
If As3935_srej <> As3935_srej_eep Then
As3935_srej_eep = As3935_srej ' Einstellung speichern
Gosub As3935_wr_srej ' Spike rejection schreiben
Ereignis = 6 ' Set SPIKE_REJECT
End If
End If
Case 44 ' Einstellung Minimum Number of Lightning
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 43 ' vorhergehender Menupunkt
Menunext = 45 ' nächster Menupunkt
Wertmax = 3 ' höchster Wert für aktuelle Einstellung
Wert = As3935_min_num_ligh ' Wert übernehmen
Thirdline : Lcd "Minimum Number of " ' 3. Zeile
Fourthline : Lcd "Lightning: " ' 4. Zeile
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
As3935_min_num_ligh = Wert ' Wert übernehmen
Str10 = Lookupstr(as3935_min_num_ligh , Number_of_lightning)
Locate 4 , 12 : Lcd Str10 ; " "
If As3935_min_num_ligh < 3 Then
Locate 4 , 12 ' Cursor anzeigen
Else
Locate 4 , 13 ' Cursor anzeigen
End If
If As3935_min_num_ligh <> As3935_min_num_ligh_eep Then
As3935_min_num_ligh_eep = As3935_min_num_ligh ' Einstellung speichern
Gosub As3935_wr_min_num_ligh ' Minimum number of lightning schreiben
Ereignis = 4 ' Set MIN_NUM_LIGH
End If
End If
Case 45 ' Einstellung Mask Disturber
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 44 ' vorhergehender Menupunkt
Menunext = 46 ' nächster Menupunkt
Wertmax = 1 ' höchster Wert für aktuelle Einstellung
Wert = As3935_mask_dist ' Wert übernehmen
Thirdline : Lcd "Mask Disturber: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
As3935_mask_dist = Wert ' Wert übernehmen
Locate 4 , 9
If As3935_mask_dist = 0 Then
Lcd "off" ' 4.Zeile
Else
Lcd "on " ' 4.Zeile
End If
Locate 4 , 9 ' Cursor anzeigen
If As3935_mask_dist <> As3935_mask_dist_eep Then
As3935_mask_dist_eep = As3935_mask_dist ' Einstellung speichern
Gosub As3935_wr_mask_dist ' Mask Disturber schreiben
Ereignis = 7 ' Set MASK_DISTURB
End If
End If
Case 46 ' Einstellung Load Preset
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 45 ' vorhergehender Menupunkt
Menunext = 4 ' nächster Menupunkt
Wertmax = 1 ' höchster Wert für aktuelle Einstellung
Wert = 0 ' Wert übernehmen
Thirdline : Lcd "Load Preset: " ' 3. Zeile
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Locate 4 , 7 ' 4. Zeile
If Wert = 0 Then
Lcd "User " ' 4. Zeile
Gosub As3935_ld_settings ' Benutzereinstellungen laden
Ereignis = 8 ' "Load Preset User"
Esp_zusatz_1 = 255 ' Wert zurück setzen
Else ' indoor
Lcd "Default" ' 4. Zeile
Gosub As3935_ld_default ' Load Default Preset
Ereignis = 9 ' "Load Set Default"
Esp_zusatz_1 = 255 ' Wert zurück setzen
End If
Locate 4 , 7 ' Cursor anzeigen
End If
Case 5 ' Einstellungen diverse
If Menu <> Menu_old Then
Menu_old = Menu
Menuverlassen = 30
Menunext = 50
Cursor Off Noblink : Cls ' Anzeige löschen
Locate 1 , 4 : Lcd "Einstellungen" ' 1. Zeile Überschrift
Locate 2 , 7 : Lcd "diverse" ' 2. Zeile
End If
Case 50 ' Einstellung Ausgabe seriell ein/aus
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 5 ' vorhergehender Menupunkt
Menunext = 51 ' nächster Menupunkt
Wertmax = 1 ' höchster Wert für aktuelle Einstellung
Wert = Ser_ausgabe ' Wert übernehmen
Cursor On Noblink ' Cursor ein blinkend
Locate 2 , 2 : Lcd "serielle Schnittst." ' 2. Zeile
Thirdline : Lcd "Ausgabe: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Ser_ausgabe = Wert
Gosub Lcd_ein_aus ' Anzeige ein/aus
If Ser_ausgabe <> Ser_ausgabe_eep Then
Ser_ausgabe_eep = Ser_ausgabe ' Einstellungen speichern
End If
End If
Case 51 ' Einstellung Baudrate serielle Schnittstelle
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 50 ' vorhergehender Menupunkt
Menunext = 52 ' nächster Menupunkt
Wertmax = 8 ' höchster Wert für aktuelle Einstellung
Wert = Ser_baudindex ' Wert übernehmen
Locate 2 , 2 : Lcd "serielle Schnittst." ' 2. Zeile
Thirdline : Lcd "Baudrate: " ' 3. Zeile
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Ser_baudindex = Wert
Str8 = Lookupstr(ser_baudindex , Table_ser_baud)
Locate 4 , 8 : Lcd Str8 ' 4. Zeile
Locate 4 , 13 ' Cursor anzeigen
If Ser_baudindex <> Ser_baudindex_eep Then
Ser_baudindex_eep = Ser_baudindex ' Einstellungen speichern
Gosub Ser_set_baud ' Einstellung Übertragungsrate serielle Schnittstelle
End If
End If
Case 52 ' Einstellung Tonausgabe bei Störung ein/aus
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 51 ' vorhergehender Menupunkt
Menunext = 53 ' nächster Menupunkt
Wertmax = 1 ' höchster Wert für aktuelle Einstellung
Wert = Sound_dist ' Wert übernehmen
Locate 2 , 2 : Lcd " Warnton " ' 2. Zeile
Thirdline : Lcd "bei St{239}rung:" ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Sound_dist = Wert
Gosub Lcd_ein_aus ' Anzeige ein/aus
If Sound_dist <> Sound_dist_eep Then
Sound_dist_eep = Sound_dist ' Einstellungen speichern
End If
End If
Case 53 ' Einstellung Tonausgabe bei Blitzen ein/aus
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 52 ' vorhergehender Menupunkt
Menunext = 5 ' nächster Menupunkt
Wertmax = 1 ' höchster Wert für aktuelle Einstellung
Wert = Sound_light ' Wert übernehmen
Locate 2 , 2 : Lcd " Warnton " ' 2. Zeile
Thirdline : Lcd "bei Blitz: " ' 3. Zeile
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Sound_light = Wert
Gosub Lcd_ein_aus ' Anzeige ein/aus
If Sound_light <> Sound_light_eep Then
Sound_light_eep = Sound_light ' Einstellungen speichern
End If
End If
Case 6 ' Ereignisspeicher
If Menu <> Menu_old Then
Menu_old = Menu
Menuverlassen = 30
Menunext = 60
Cursor Off Noblink : Cls ' Anzeige löschen
Upperline : Lcd " Ereignisspeicher" ' 1. Zeile Überschrift
End If
Case 60 ' Ereignisspeicher anzeigen
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Menuback = 6 ' vorhergehender Menupunkt
Menunext = 6 ' nächster Menupunkt
Wertmax = 99 ' 0-99 (1-100) höchster Wert für Ereignisspeicher
Wert = 0
Cursor On Noblink ' Cursor ein blinkend
Upperline : Lcd " Ereignis: " ' 1. Zeile Überschrift
End If
If Wertrefresh = 1 Then
Wertrefresh = 0 ' nur einmal ausführen
Menuverlassen = 60 ' Menu nach 60 Sekunden verlassen
Locate 1 , 15 : X = Wert + 1 : Lcd X ; " " ' Ereignis-Nummer 1-100 anzeigen
Y = X + Esp_zeiger : Decr Y
If Y >= 101 Then
Y = Y - 100
End If
Z = Ereignis_eep(y)
If Z <= Ereignis_max Then ' Maximalanzahl Ereignistexte
L = Ereignis_syssec_eep(y) ' Systemsekunden übernehmen
Str10 = Date(l) ' Datum Ereigins übernehmen
Str8 = Left(str10 , 6) ' Tag und Monat übernehmen
Lowerline : Lcd Str8 ; "20" ' 2. Zeile Datum
Str8 = Right(str10 , 2) : Lcd Str8 ' Jahr übernehmen und anzeigen
Locate 2 , 13 : Lcd Time(l) ' 2. Zeile Uhrzeit
Str20 = Lookupstr(z , Ereignisse) ' Ereignistext String einfügen
Thirdline : Lcd Str20 ' 3. Zeile Ereignistext anzeigen
X1 = Len(str20) : X1 = 20 - X1 : Lcd Space(x1) ' 3. Zeile Rest löschen
Y1 = Esp_zusatz_1_eep(y)
If Y1 < 255 Then
If Z = 4 Then ' Set Min Nr Lightning
If Y1 <= 3 Then
Str20 = Lookupstr(y1 , Number_of_lightning)
Else
Str20 = ""
End If
Elseif Z = 7 Then ' Set Mask Disturber
If Y1 = 0 Then
Str20 = "off"
Else
Str20 = "on"
End If
Else
Str20 = Str(y1)
End If
If Str20 <> "" Then
Str20 = Str20 + " {126} " ' Pfeil nach rechts
End If
Z1 = Esp_zusatz_2_eep(y)
If Z = 4 Then ' Set Min Nr Lightning
If Y1 <= 3 Then
Str10 = Lookupstr(z1 , Number_of_lightning)
Else
Str10 = ""
End If
Elseif Z = 7 Then ' Set Mask Disturber
If Z1 = 0 Then
Str10 = "off"
Else
Str10 = "on"
End If
Else
Str10 = Str(z1)
End If
Str20 = Str20 + Str10
Fourthline : Lcd Str20 ' 4. Zeile
Z = Len(str20) : Z = 20 - Z : Lcd Space(z) ' 4. Zeile Rest löschen
Else
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
Else
Lowerline : Lcd Space(20) ' 2. Zeile löschen
Thirdline : Lcd Space(20) ' 3. Zeile löschen
Fourthline : Lcd Space(20) ' 4. Zeile löschen
End If
If X < 10 Then ' Cursorposition
Locate 1 , 15 ' Cursor anzeigen
Elseif X < 100 Then
Locate 1 , 16 ' Cursor anzeigen
Else
Locate 1 , 17 ' Cursor anzeigen
End If
End If
Case 7 ' Info
If Menu <> Menu_old Then
Menu_old = Menu
Menuverlassen = 30
Menunext = 70
Cls
Gosub Lcd_info ' Anzeige Infotext
End If
Case 70 ' Neustart
If Menu <> Menu_old Then
Menu_old = Menu ' nur einmal ausführen