Hallo,
ich möchte mit einer RC5FB bei kurzem druck auf Taste 1 Ausgang 1 schalten. Bei langem Druck sollen Ausgang 1&2 schalten.
Wie werte ich die Tastenlänge aus?

In meinem Versuch zähle ich eine Variable hoch - aber irgend wo hängt es - uns zwar beim zurücksetzen/auswerten der Variable.

Code:
'RC5 Eingang über Pin5 / PD3

'L1-L12 sind die Lampen, wobei die ungerade die halbe Helligkeit ist und die gerade die volle Helligkeit mit beiden zusammen

'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "m8def.dat"                                      'AT-Mega8
$crystal = 16000000                                         'Quarz: 16 MHz 
$baud = 38400                                                                               'Baudrate definieren

'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang
Ddrc = &B11111111                                           '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang

Portb = 0
Portc = 0

'-------------------------------------------------------------------------------
'Timer0 = 8 Bit
'wird für RC5 Auswertung benötigt!!!
Config Rc5 = Pind.3                                         'Timer0 in Benutzung!!!
Portd.3 = 1                                                 '??????????????????????????????????

'16Bit Timer:
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer1_irq
Const Timervorgabe = 34286                                  '2 mal pro Sekunde
Enable Timer1
Enable Interrupts


'-------------------------------------------------------------------------------
'Variablen:
'-------------------------------------------------------------------------------
Dim Address As Byte , Command As Byte , Flag As Bit         'RC5

'Taste 1-6 auf der FB
Dim T1 As Word , T2 As Word , T3 As Word , T4 As Word , T5 As Word , T6 As Word
'Lampe 1-12
Dim L1 As Bit , L2 As Bit , L3 As Bit , L4 As Bit , L5 As Bit , L6 As Bit , L7 As Bit , L8 As Bit , L9 As Bit , L10 As Bit , L11 As Bit , L12 As Bit ,


'Lampen festlegen
Portc.5 = L1
Portc.4 = L2




'-------------------------------------------------------------------------------
'Vor Programmstart:

'alle Lampen aus:
L1 = 0
L2 = 0
L3 = 0
L4 = 0
L5 = 0
L6 = 0
L7 = 0
L8 = 0
L9 = 0
L10 = 0
L11 = 0
L12 = 0


'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Print " geht los... "
Do


'-------------------------------------------------------------------------------
'Rc5 Code einlesen:
Getrc5(address , Command)
    'Print "Address: " ; Address
     'Print "Command: " ; Command



'-------------------------------------------------------------------------------
'RC5 Code umsetzen:

   If Address = 0 Then                                      'Adresse 0=TV FB
     Command = Command And &B01111111
     Reset Command.7                                        ' reset toggle bit / Restmüll beseitigen

        Select Case Command

           Case 0 : Print "CASE = 0"
           Case 1 : Incr T1
           Case 2 : Incr T2
           Case 3 : Incr T3
           Case 4 : Incr T4
           Case 5 : Incr T5
           Case 6 : Incr T6
           Case Else : Print "Fehler: " ; Command
         End Select


         If T1 > 0 Then                                     'wenn Taste 1 gedrückt wurde




               If T1 => 1 And T1 < 6 Then                   'wenn Taste kurz gedrückt wurde
                   Print "--> T1: " ; T1
                   If L1 = 0 Then                           'wenn Lampe 1 aus ist
                     Set L1                                 'schalte Lampe 1 an
                     Print "L1 an"
                     Else                                   'sonst
                     Reset L1                               'schalte Lampe 1 aus
                     Print "L1 aus"
                     Reset L2                               'schalte Lampe 2 aus
                     Print "L2 aus"
                   End If

               Else                                         'Wenn Taste 1 lange gedrückt wurde
                   Print "--> T1größer5: " ; T1
                   If L1 <> L2 Then                         'also nur 1 Lampen an
                     Set L1                                 'schalte Lampe 1 an
                     Print "L1an"
                     Set L2                                 'schalte Lame 2 an
                     Print "L2an"
                   End If

                   If L1 = 1 And L2 = 1 Then                'Wenn beide Lampen an sind
                     Reset L1                               'schalte Lampe 1 aus
                     Print "L1aus"
                     Reset L2                               'schalte Lampe 2 aus
                     Print "L2aus"
                   End If

                   If L1 = 0 And L2 = 0 Then                'Wenn beide Lampen aus sind
                     Set L1                                 'schlate Lampe 1 an
                     Print "L1 AN"
                     Set L2                                 'schalte Lampe 2 an
                     Print "L2 AN"
                   End If

               End If


         End If                                             'ENDE von "wenn Taste 1 gedrückt wurde"







     'Print "-----------------------"
     'Print "Address: " ; Address
     'Print "Command: " ; Command
     'Print "-----------------------"

   Else                                                     'Wenn Adresse nicht = 0
   Timer1 = Timervorgabe                              'Timer1 zurücksetzen, damit erst bei Tastendruck gezählt wird
     Print "timerzurück"
   End If






Loop
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
'Sprungmarken
'-------------------------------------------------------------------------------
Timer1_irq:
Timer1 = Timervorgabe

T1 = 0
T2 = 0
T3 = 0
T4 = 0
T5 = 0
T6 = 0

Print "L1: " ; L1
Print "L2: " ; L2


Return
wo muss ich den Timer zurück setzen? - nun wird er nach jedem Tastendruck zurück gesetzt und wenn man die Taste lange drückt, verhält sich das Programm so, als wenn die FB immer Impulse sendet.


Hintergrund:
Ich habe 6 Lampen mit je 2 Leuchtmitteln. 1 Leuchtmittel ist also halbe Helligkeit und 2 Leuchtmittel sind dann volle Helligkeit. Wenn man kurz drückt, soll eine Lampe angehen und wenn man etwas länger drückt, sollen beide Leuchtmittel angehen. "Aus" natürlich genauso.