DOIF/Mehrfachnutzung eines Tasters: Unterschied zwischen den Versionen
Trelle (Diskussion | Beiträge) (→Links) |
Krikan (Diskussion | Beiträge) (Link-Korrektur) |
||
(6 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Datei:Mehrfachnutzung eines Tasters.png|mini|455px|right|]] | |||
==Mehrfachbelegung eines Tasters== | ==Mehrfachbelegung eines Tasters== | ||
Die Mehrfachbelegung eines Tasters wird durch die Nutzung des DOIF als Zustandsautomat (State Maschine) realisiert. | Die Mehrfachbelegung eines Tasters wird durch die Nutzung des DOIF als Zustandsautomat (State Maschine) realisiert. | ||
===Funktionsweise=== | ===Funktionsweise=== | ||
{{Randnotiz|RNText=Hinweis | {{Randnotiz|RNText=Hinweis | ||
* Verwendung von DOIF als State Maschine durch Bezug auf den eigenen Status | * Verwendung von DOIF als '''State Maschine''' durch Bezug auf den eigenen Status '''$cmd''' in der Bedingung | ||
* triggern durch Events ["<Regex Device>:<Regex Event>"]}} | * triggern durch Events '''["<Regex Device>:<Regex Event>"]'''}} | ||
'''Taster''' simuliert ein Tastergerät das short und long sendet.<br> | '''Taster''' simuliert ein Tastergerät das short und long sendet.<br> | ||
'''Lampe1''' und '''Lampe2''' simulieren 2 Lampengeräte.<br> | '''Lampe1''' und '''Lampe2''' simulieren 2 Lampengeräte.<br> | ||
'''schrittSchalter_Labor''' bildet die Mehrfachbelegung eines Tasters nach.<br> | '''schrittSchalter_Labor''' bildet die Mehrfachbelegung eines Tasters nach.<br> | ||
'''$cmd''' ist nach der Initialisierung des DOIF 0 und ist die Kurzform für [$SELF:cmd] oder [ | '''$cmd''' ist nach der Initialisierung des DOIF 0 und ist die Kurzform für '''[?$SELF:cmd]''' oder '''[?schrittSchalter_Labor001:cmd]'''.<br> | ||
Wenn '''Taster short''' sendet, dann wird die erste Bedingung wahr und '''Lampe1''' wird eingeschaltet, '''$cmd''' ist jetzt 1.<br> | Wenn '''Taster short''' sendet, dann wird die erste Bedingung wahr und '''Lampe1''' wird eingeschaltet, '''$cmd''' ist jetzt 1.<br> | ||
Beim nächsten '''short''' wird die zweite Bedingung wahr und Lampe2 wird eingeschaltet, '''$cmd''' ist jetzt 2.<br> | Beim nächsten '''short''' wird die zweite Bedingung wahr und Lampe2 wird eingeschaltet, '''$cmd''' ist jetzt 2.<br> | ||
Beim nächsten '''short''' wird die dritte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden eingeschaltet, '''$cmd''' ist jetzt 3.<br> | Beim nächsten '''short''' wird die dritte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden eingeschaltet, '''$cmd''' ist jetzt 3.<br> | ||
Beim nächsten '''short''' wird die vierte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden ausgeschaltet, '''$cmd''' ist jetzt 4. Weil '''$cmd''' gleich vier ist, wird beim nächsten '''short''' wieder die erste Bedingung wahr und der | Beim nächsten '''short''' wird die vierte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden ausgeschaltet, '''$cmd''' ist jetzt 4.<br>Weil '''$cmd''' gleich vier ist, wird beim nächsten '''short''' wieder die erste Bedingung wahr und der Zyklus beginnt von vorn. | ||
===Definition=== | ===Definition=== | ||
<pre> | <pre> | ||
Zeile 34: | Zeile 35: | ||
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]=== | ===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]=== | ||
<pre> | <pre> | ||
define button_Labor000 dummy | |||
attr button_Labor000 alias Taster | |||
attr button_Labor000 group Labor: Mehrfachnutzung eines Tasters | |||
attr button_Labor000 room DOIF_Labor | |||
attr button_Labor000 setList short long | |||
attr button_Labor000 webCmd short:long | |||
define lamp1_Labor000 dummy | |||
attr lamp1_Labor000 alias Lampe1 | |||
attr lamp1_Labor000 group Labor: Mehrfachnutzung eines Tasters | |||
attr lamp1_Labor000 room DOIF_Labor | |||
define lamp2_Labor000 dummy | |||
attr lamp2_Labor000 alias Lampe2 | |||
attr lamp2_Labor000 group Labor: Mehrfachnutzung eines Tasters | |||
attr lamp2_Labor000 room DOIF_Labor | |||
define schrittSchalter_Labor001 DOIF ## 1 \ | define schrittSchalter_Labor001 DOIF ## 1 \ | ||
(["button_Labor000:short"] and $cmd=~"0|4") \ | (["button_Labor000:short"] and $cmd=~"0|4") \ | ||
Zeile 48: | Zeile 66: | ||
attr schrittSchalter_Labor001 alias Schrittschalter | attr schrittSchalter_Labor001 alias Schrittschalter | ||
attr schrittSchalter_Labor001 cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4 | attr schrittSchalter_Labor001 cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4 | ||
attr schrittSchalter_Labor001 group Mehrfachnutzung eines Tasters | attr schrittSchalter_Labor001 group Labor: Mehrfachnutzung eines Tasters | ||
attr schrittSchalter_Labor001 room DOIF_Labor | attr schrittSchalter_Labor001 room DOIF_Labor | ||
save | |||
</pre> | </pre> | ||
==Links== | ==Links== | ||
* [[DOIF]] | * [[DOIF]] | ||
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]] | |||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] |
Aktuelle Version vom 13. Februar 2017, 14:58 Uhr
Mehrfachbelegung eines Tasters
Die Mehrfachbelegung eines Tasters wird durch die Nutzung des DOIF als Zustandsautomat (State Maschine) realisiert.
Funktionsweise
- Verwendung von DOIF als State Maschine durch Bezug auf den eigenen Status $cmd in der Bedingung
- triggern durch Events ["<Regex Device>:<Regex Event>"]
Taster simuliert ein Tastergerät das short und long sendet.
Lampe1 und Lampe2 simulieren 2 Lampengeräte.
schrittSchalter_Labor bildet die Mehrfachbelegung eines Tasters nach.
$cmd ist nach der Initialisierung des DOIF 0 und ist die Kurzform für [?$SELF:cmd] oder [?schrittSchalter_Labor001:cmd].
Wenn Taster short sendet, dann wird die erste Bedingung wahr und Lampe1 wird eingeschaltet, $cmd ist jetzt 1.
Beim nächsten short wird die zweite Bedingung wahr und Lampe2 wird eingeschaltet, $cmd ist jetzt 2.
Beim nächsten short wird die dritte Bedingung wahr Lampe1 und Lampe2 werden eingeschaltet, $cmd ist jetzt 3.
Beim nächsten short wird die vierte Bedingung wahr Lampe1 und Lampe2 werden ausgeschaltet, $cmd ist jetzt 4.
Weil $cmd gleich vier ist, wird beim nächsten short wieder die erste Bedingung wahr und der Zyklus beginnt von vorn.
Definition
## 1 (["button_Labor000:short"] and $cmd=~"0|4") (set lamp1_Labor000 on) ## 2 DOELSEIF (["button_Labor000:short"] and $cmd==1) (set lamp2_Labor000 on, set lamp1_Labor000 off) ## 3 DOELSEIF (["button_Labor000:short"] and $cmd==2) (set lamp(1|2)_Labor000 on) ## 4 DOELSEIF (["button_Labor000:short"] and $cmd==3) (set lamp(1|2)_Labor000 off)
Übungsvorschlag
- Verändere das DOIF so, dass nicht beide Lampen auf einmal ausgeschaltet werden, sondern Eine nach der Anderen.
- Lasse die Lampen mit long ausschalten, egal welcher Befehlszweig aktiv ist.
Laborgruppe zum Import mit Raw definition
define button_Labor000 dummy attr button_Labor000 alias Taster attr button_Labor000 group Labor: Mehrfachnutzung eines Tasters attr button_Labor000 room DOIF_Labor attr button_Labor000 setList short long attr button_Labor000 webCmd short:long define lamp1_Labor000 dummy attr lamp1_Labor000 alias Lampe1 attr lamp1_Labor000 group Labor: Mehrfachnutzung eines Tasters attr lamp1_Labor000 room DOIF_Labor define lamp2_Labor000 dummy attr lamp2_Labor000 alias Lampe2 attr lamp2_Labor000 group Labor: Mehrfachnutzung eines Tasters attr lamp2_Labor000 room DOIF_Labor define schrittSchalter_Labor001 DOIF ## 1 \ (["button_Labor000:short"] and $cmd=~"0|4") \ (set lamp1_Labor000 on)\ ## 2\ DOELSEIF (["button_Labor000:short"] and $cmd==1) \ (set lamp2_Labor000 on, set lamp1_Labor000 off)\ ## 3\ DOELSEIF (["button_Labor000:short"] and $cmd==2) \ (set lamp(1|2)_Labor000 on)\ ## 4\ DOELSEIF (["button_Labor000:short"] and $cmd==3) \ (set lamp(1|2)_Labor000 off) attr schrittSchalter_Labor001 alias Schrittschalter attr schrittSchalter_Labor001 cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4 attr schrittSchalter_Labor001 group Labor: Mehrfachnutzung eines Tasters attr schrittSchalter_Labor001 room DOIF_Labor save