Programm „Timer.bas“:


'4 Kanal Schaltuhr                                                                   Taster an dig1 (und +5V)


10 lcd1 : cls : locate 1,3 : print "Schaltuhr" : wait 20                    'Titel auf LCD ausgeben


'Schaltzeiten:

100 let $0 = "06:10:00"  'Relais 1 Ein

105 let $1 = "18:48:00"   'Relais 1 Aus

110 let $2 = "99:99:99"   'Relais 2 Ein

115 let $3 = "99:99:99"   'Relais 2 Aus

120 let $4 = "99:99:99"   'Relais 3 Ein

125 let $5 = "99:99:99"  'Relais 3 Aus

130 let $6 = "99:99:99"   'Relais 4 Ein

135 let $7 = "99:99:99"   'Relais 4 Aus


190 do : locate 3,3 : print clock : wait 1 : loop until dig1 = 1'     Uhrzeit / auf Taste an Dig1 warten


200 locate 1,13 : print "aktiv" : wait 20 : do               'Hauptschleife

205 if $0 = "99:99:99" then goto 215                        'Einschaltzeit für Kanal 1 vorhanden?

210 if $0 = clock then set rel1  ': let $0 = "99:99:99"   'dann Relais 1 einschalten (evtl. Schaltzeit löschen)

215 if $1 = "99:99:99" then goto 225  'Ausschaltzeit Kanal1 vorhanden?

220 if $1 = clock then rset rel1 ': let $1 = "99:99:99"  'dann Relais1 ausschalten (evtl. Schaltzeit löschen)

225 if $2 = "99:99:99" then goto 235

230 if $2 = clock then set rel2

235 if $3 = "99:99:99" then goto 245

240 if $3 = clock then rset rel2

245 if $4 = "99:99:99" then goto 255

250 if $4 = clock then set rel3

255 if $5 = "99:99:99" then goto 265

260 if $5 = clock then rset rel3

265 if $6 = "99:99:99" then goto 275

270 if $6 = clock then set rel4

275 if $7 = "99:99:99" then goto 290

280 if $7 = clock then rset rel4

290 locate 3,3 : print clock                'Uhrzeit auf LCD anzeigen

300 loop until dig1 = 1                      'Schleife bis Taster an Dig1 betätigt wird

310 goto 10                                     'dann von vorne



Eine kurze Besprechung:


Zeile 10:

Die Ausgabe wird auf das LCD umgeleitet und der Titel ausgedruckt. Danach ein wenig warten. (wait 20)


Zeile 100 - 135:

Hier werden die Schaltzeiten angegeben. Sie sind in den Stringvariablen $0...$7 festgehalten. Sie werden nicht auf unsinnige Zeiten geprüft. 99:99:99 wurde als nicht-programmierte Schaltzeit festgelegt. Die Kommentare am Zeilenende sagen, was zum jeweiligen Zeitpunkt geschieht. Die gewünschten Zeitwerte bitte überschreiben.( Format: HH:MM:SS) HH = Stunden, MM = Minuten, SS = Sekunden. Im Beispiel ist nur für das Relais 1 eine Einschalt- und eine Ausschaltzeit angegeben: 6 uhr 10 einschalten, 18 Uhr 48 ausschalten. Nach dem Start des Programms werden diese Zeiten also erst einmal „eingelesen“.


Zeile 190:

Hier wird in einer do - loop Schleife laufend die aktuelle Uhrzeit ausgegeben. Solange bis an dig1 ein High-Pegel auftritt: until dig1 = 1. Dies wird durch Druck auf den angeschlossenen Taster erreicht. Dann ist die Schaltuhr aktiv.


Zeile 200:

Der aktive Zustand wird durch Ausgabe von „aktiv“ auf dem LCD angezeigt. Nach kurzer Wartezeit wird mit do die Hauptschleife gestartet.


Zeile 205 - 280:

Hier werden jetzt die gespeicherten Schaltzeiten laufend mit der aktuellen Uhrzeit verglichen z.B. if $0 = clock then set rel1 und bei Übereinstimmung das entsprechende Relais gesetzt oder resettet. Ist die gespeicherte Schaltzeit „99:99:99“ dann wird der Schaltvorgang übersprungen (z.B. goto 235). Soll die Schaltuhr eine Wochenschaltuhr sein, dann reicht der grüne Programmtext. Sollen die Schaltvorgänge nur einmalig sein, müssen die Schaltzeiten nach dem Schaltvorgang wieder gelöscht werden. z.B. let $0 = „99:99:99“. Ich habe diesen zusätzlichen Text mal mit in den Kommentar bei Zeile 210 und 220 gepackt. Wird er gebraucht, das Kommentarzeichen löschen und entsprechenden Text bei den anderen Zeiten hinzufügen.


Zeile 290:

Auch im Schaltmodus soll die aktuelle Uhrzeit angezeigt werden.


Zeile 300:

Auch die Hauptschleife, die hier zu Ende ist, kann durch Druck auf den Taster an dig1 abgebrochen werden. Dann geht es in Zeile 310 wieder zum Anfang des Programms.


Das Programm bietet viel Spielraum für Verbesserungen und Erweiterungen.

zurück

7. Beispiel


Eine 4-Kanal-Schaltuhr: