Tastlängen abfragen

waskostdas

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich würde gerne über einen Taster mehrere Aktionen steuern je nachdem wie lange ich den Taster drücke.

z.B. Taster 1 Sek gedrückt = Ausgang 0.0 ein, Taster 5 Sek gedrückt Ausgang 0.1 ein (aber Ausgang 0.0 soll aus bleiben)

Die Ausgänge längenabhängig zu steuern bekomme ich mit TON hin aber die überschneiden sich dann immer.

Jemand einen Rat?

Danke im Voraus
 
Hi!

Frag doch einfach nach der einen Sekunde die negative Flanke ab. Sprich wenn nach 1er Sekunde der Taster losgelassen wird, geht der Ausgang auf 1, wenn nicht dann nicht.
Selbiges bei 3,5,8,10 Sekunden...

So würd ich das am einfachsten machen.

EDIT:

Habs grad versucht, funzt einwandfrei:

Erste Abfrage auf 1S:
U E0.0
L S5T#1S
SE T1
U T2
R T1
NOP 0
NOP 0
U T1
= M 0.0

U E0.0
FN M 0.1
U M 0.0
S A 0.0
2. Abfrage auf 3s:

U E0.0
L S5T#3S
SE T2
U T3
R T2
NOP 0
NOP 0
U T2
= M0.3

U E0.0
FN M 0.4
U M 0.3
S A 0.1
usw. usf...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier ist mal ein Ansatz den du auch in einem FB programmieren und dann so oft du willst als Multiinstanz aufrufen kanst.

Code:
       U     #taktmerker_10Hz
        FP    #hilfsmerker1_flanke
        =     #impuls_10ms                // Aufbereitung 0,1sek Impuls
   
        U     #taster
        FP    #hilfsmerker2_flanke
        NOT   
        SPB   jum1
        L     0
        T     #Zaehler_10ms_Imp           // Reset Zaehler 
  jum1: NOP   0
   
        U     #taster
        U     #impuls_10ms
        NOT   
        SPB   jum2
        L     1
        L     #Zaehler_10ms_Imp           // Timer als Zähler nachgebildet
        +I    
        T     #Zaehler_10ms_Imp
  jum2: NOP   0
   
        U(    
        L     0
        L     #Zaehler_10ms_Imp
        <=I   
        )     
        U(    
        L     9
        L     #Zaehler_10ms_Imp
        >=I   
        )     
        UN    #taster
        =     #Ausgang_1                  //Ausgang 1 Taste kürzer als 1sek betätigt
   
        U(    
        L     10
        L     #Zaehler_10ms_Imp
        <=I   
        )     
        U(    
        L     19
        L     #Zaehler_10ms_Imp
        >=I   
        )     
        UN    #taster
        =     #Ausgang_2                  //Ausgang 2 Taste länger als 1sek kürzer als 2sek betätigt
   
        U(    
        L     20
        L     #Zaehler_10ms_Imp
        <=I   
        )     
        U(    
        L     29
        L     #Zaehler_10ms_Imp
        >=I   
        )     
        UN    #taster
        =     #Ausgang_3                  //Ausgang 3 Taste länger als 2sek kürzer als 3sek betätigt
Diese Version hat noch den Vorteil das wenn der Taster länger als die längste angegebene Zeit gedrückt wird alle Ausgänge ausgeschaltet werden. Es werden keine Timer benötigt und es können sehr leicht noch mehr Ausgänge dabeiprogrammiert werden.
 
Code:
       U     #taktmerker_10Hz
        FP    #hilfsmerker1_flanke
        =     #impuls_10ms                // Aufbereitung 0,1sek Impuls
Dieser Programmcode funktioniert nur korrekt, wenn die Zykluszeit der CPU immer kleiner 50ms ist.


Code:
        U     #taster
        FP    #hilfsmerker2_flanke
        NOT   
        SPB   jum1
Für NOT + SPB gibt es fertig den Sprungbefehl SPBN.
Code:
        U     #taster
        FP    #hilfsmerker2_flanke
        [COLOR="RoyalBlue"]SPBN[/COLOR]  jum1


Code:
        U(    
        L     10
        L     #Zaehler_10ms_Imp
        <=I   
        )     
        U(    
        L     19
        L     #Zaehler_10ms_Imp
        >=I   
        )     
        UN    #taster
        =     #Ausgang_2                  //Ausgang 2 Taste länger als 1sek kürzer als 2sek betätigt
Warum die Vergleiche "verkehrt herum"?
So ist es viel verständlicher:
Code:
        U(    
[COLOR="royalblue"]        L     #Zaehler_10ms_Imp
        L     10
        >=I   [/COLOR]
        )     
        U(    
[COLOR="royalblue"]        L     #Zaehler_10ms_Imp
        L     19
        <=I   [/COLOR]
        )     
        UN    #taster
        =     #Ausgang_2                  //Ausgang 2 Taste länger als 1sek kürzer als 2sek betätigt

Gruß
Harald
 
Hallo,
ich nehme an, dass du die Funktion "Taste kurz" und "Taste lang" von LCN oder EIB nachempfinden willst ...
Das funktioniert bei denen so, dass erstmal irgendwo festgelegt ist, ab wann ein Signal als "lang" interpretiert wird. Dann läuft es weiterhin so, das mit dem Tastendruck der Timer gestartet wird. Kann die Zeit ablaufen, so ist es ein "lang"-Signal. Diese Entscheidung wird dann aber tatsächlich erst nach Ablauf der vorgegebenen Zeit getroffen. Wird die Taste losgelassen bevor der Timer ablaufen konnte, so wird in dem Moment die Entscheidung getroffen und das Signal als "kurz" eingestuft ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Funktion unter Microwin

Hallo,

erstmal danke für die Lösungsansätze.
Ich habe leider vergessen zu sagen das ich das ganze unter Microwin 4.0 zu lösen versuche. Bin weiterhin für jeden Rat dankbar.
Wo ist eigentlich dokumentiert wie ich unter Microwin FB's erstelle?

Gruß

Helge
 
Zurück
Oben