Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Zuhilfenahme des internen Timers Kategorie: C-Control I V1.1 (von Achim - 25.08.2007 11:21)
 Als Antwort auf Zuhilfenahme des internen Timers von Klaus - 24.08.2007 1:34
Achim nutzt:  CC1-Station V1.1
> Problem ist, die Abfrage bzw. die Verwendung des internen Timers der CC. Ich möchte sagen wir mal, eine Ampelanlage steuern und die Schaltphasen unter Zuhilfenahme des Timers realisieren. Das Ganze sollte so Ablaufen dass die oder mehrere Ampelanlagen unabhängig von anderen Schaltaufgaben funktioniert.

> Mein Gedanke hierbei wäre z.B. eine Unterroutine, in der der Timer eingebunden ist und mit Gosub oder Goto ausgelesen wird. In meinem Handbuch zur Unit steht leider nicht sehr viel darüber.

Wenn es gleich mehrere Ampelanlagen sein sollen, wo dann auch noch die unterschiedlichen Richtungen unterschiedliche Grün- und Rot-Zeiten haben sollen, könnte es natürlich knapp mit den CC-Variablen werden, um das alles zu verwalten. Um Dir mal aufzuzeigen, wie das grundsätzlich geht, ein kleines ungetestes Beispiel.

define sekunde_alt byte ' Merker fuer Sekunden-Wechsel
define ampelStatusIndex byte ' Index in Tabelle AmpelPhasen
define ampelFarbe byte
define ampelSekunden byte ' Zeit bis nächste AmpelPhase

define ROT 1
define GELB 2
define GELB_ROT 3
define GRUEN 4
define TAB_END 5

define ROT_PHASE 15 ' in Sekunden
define GELB_PHASE 3 ' in Sekunden
define GELB_ROT_PHASE  1 ' in Sekunden
define GRUEN_PHASE  10 ' in Sekunden

'Init
ampelStatusIndex = 0  
looktab ampelPhasen, ampelStatusIndex, ampelFarbe
looktab ampelZeiten, ampelStatusIndex, ampelSekunden
gosub AmpelAnzeige
sekunde_alt = -1 ' Sekunden-Wechsel erzwingen

#loop
' interne Uhr auslesen
if second = sekunde_alt the goto Mach_was _anderes ' immer noch in der selben Sekunde
' neue Sekunde
gosub AmpelSchaltung
gosub AmpelAnzeige
...
' andere Sachen, die einmal pro Sekunde laufen
...
#mach_was_anderes
...
' andere Sachen, die bei jedem Durchlauf laufen
...
goto loop ' von vorne


#AmpelSchaltung
ampelSekunden = ampelSekunden - 1 ' Timer runterzaehlen
if ampelSekunden > 0 then return   ' Phase läuft noch - nix zu tun

'Timer abgelaufen: Schalten
ampelStatusIndex = ampelStatusIndex +1
looktab ampelPhasen, ampelStatusIndex, ampelFarbe ' neue Farbe holen
looktab ampelZeiten, ampelStatusIndex, ampelSekunden ' neue Phasendauer holen
if ampelFarbe <> TAB_END then return ' alles klar

' ampelFarbe ist 0, Ende Tabellen erreicht. Von vorne
ampelStatusIndex = 0
looktab ampelPhasen, ampelStatusIndex, ampelFarbe
looktab ampelZeiten, ampelStatusIndex, ampelSekunden

return ' # ampel_schaltung

#AmpelAnzeige
' Hier ueber Ports geeignete LEDs schalten
if ampelFarbe = ROT then print "ROT"
if ampelFarbe = GELB then print "GELB"
if ampelFarbe = GELB_ROT then print "GELB_ROT"
if ampelFarbe = GRUEN then print "GRUEN"
return ' # AmpelAnzeige

table AmpelPhasen
  ROT, GELB_ROT, GRUEN, GELB, TAB_END
tabend

table AmpelZeiten
  ROT_PHASE, GELB_ROT_PHASE, GRUEN_PHASE, GELB_PHASE, TAB_END
tabend


HTH

Bye
 Achim

 Antwort schreiben

Bisherige Antworten:

Re: Zuhilfenahme des internen Timers (von Klaus - 26.08.2007 0:13)
    Re: Zuhilfenahme des internen Timers (von Achim - 26.08.2007 9:32)
        Re: Zuhilfenahme des internen Timers (von Klaus - 26.08.2007 14:52)