rosesa
05.06.2004, 22:52
Ich habe mir vor kurzem einen RP5 zugelegt und bin sehr happy damit.
Jetzt habe ich ein kleines Problem mit der IR Kommunikation. Ich habe ein paar Fernbedienungen ausprobiert und eine davon (SEG TV) scheint auch zu funktionieren – jedenfalls reagiert das Testprogramm (DISPLAY_IR_CODE.bas), wenn ich eine Taste drücke.
Nun war mir das Zählen etwas zu langweilig und ich habe das Programm so verändert, dass HBYTE und LBYTE als Binärzahl dargestellt werden.
Zuerst werden jeweils die Bits 7-4 dargestellt, dann folgt eine Pause und die Bits 3-0 werden dargestellt. Wenn alle 4 Werte angezeigt wurden, startet das Programm wieder von vorne. Jetzt ist es so, dass das Programm manchmal zweimal durchläuft, bevor es wieder auf ein IR-Signal wartet. Hat jemand ähnliche Erfahrungen gemacht? Kann das an der Fernbedienung liegen, oder kann ich da im Programm was verbessern?
Ich hab schon nach einer Antwort gesucht, habe aber leider Nix gefunden.
Hier mein Programm:
...
define ADR byte[6] ' IR Adresse
define CMD byte[7] ' IR Wert
define OUTPUT byte[8]
define VAR byte[9]
...
#LOOP
pause 5
sys COMNAV_STATUS
if IR_F = off then goto LOOP
gosub GET_IRDATA
if LBYTE and HBYTE = &HFF then goto LOOP
ADR=HBYTE:CMD=LBYTE
beep 100,5,10:beep 100,5,10:beep 100,5,10
' HByte Bits 7, 6, 5, 4
OUTPUT = (ADR AND &HF0) SHR 4
if OUTPUT > 0 then gosub show else gosub null
' HByte Bits 3, 2, 1, 0
OUTPUT = ADR AND &H0F
if OUTPUT > 0 then gosub show else gosub null
' HByte Bits 7, 6, 5, 4
OUTPUT = (CMD AND &HF0) SHR 4
if OUTPUT > 0 then gosub show else gosub null
' HByte Bits 3, 2, 1, 0
OUTPUT = CMD AND &H0F
if OUTPUT > 0 then gosub show else gosub null
beep 100,5,10:beep 100,5,10:beep 100,5,10
goto LOOP
'-------------------------------------------
' Funktionen
'-------------------------------------------
#show
' IN: OUTPUT
VAR = OUTPUT AND 8
if VAR = 8 then gosub LED1ON
pause 5
VAR = OUTPUT AND 4
if VAR = 4 then gosub LED2ON
pause 5
VAR = OUTPUT AND 2
if VAR = 2 then gosub LED3ON
pause 5
VAR = OUTPUT AND 1
if VAR = 1 then gosub LED4ON
pause 200
beep 100,10,100
gosub LEDSOFF
return
#null
gosub LED1ON:pause 5:gosub LED1OFF
gosub LED2ON:pause 5:gosub LED2OFF
gosub LED3ON:pause 5:gosub LED3OFF
gosub LED4ON:pause 5:gosub LED4OFF
pause 200:beep 100,10,100
return
...
Vielen Dank & Grüße
Jetzt habe ich ein kleines Problem mit der IR Kommunikation. Ich habe ein paar Fernbedienungen ausprobiert und eine davon (SEG TV) scheint auch zu funktionieren – jedenfalls reagiert das Testprogramm (DISPLAY_IR_CODE.bas), wenn ich eine Taste drücke.
Nun war mir das Zählen etwas zu langweilig und ich habe das Programm so verändert, dass HBYTE und LBYTE als Binärzahl dargestellt werden.
Zuerst werden jeweils die Bits 7-4 dargestellt, dann folgt eine Pause und die Bits 3-0 werden dargestellt. Wenn alle 4 Werte angezeigt wurden, startet das Programm wieder von vorne. Jetzt ist es so, dass das Programm manchmal zweimal durchläuft, bevor es wieder auf ein IR-Signal wartet. Hat jemand ähnliche Erfahrungen gemacht? Kann das an der Fernbedienung liegen, oder kann ich da im Programm was verbessern?
Ich hab schon nach einer Antwort gesucht, habe aber leider Nix gefunden.
Hier mein Programm:
...
define ADR byte[6] ' IR Adresse
define CMD byte[7] ' IR Wert
define OUTPUT byte[8]
define VAR byte[9]
...
#LOOP
pause 5
sys COMNAV_STATUS
if IR_F = off then goto LOOP
gosub GET_IRDATA
if LBYTE and HBYTE = &HFF then goto LOOP
ADR=HBYTE:CMD=LBYTE
beep 100,5,10:beep 100,5,10:beep 100,5,10
' HByte Bits 7, 6, 5, 4
OUTPUT = (ADR AND &HF0) SHR 4
if OUTPUT > 0 then gosub show else gosub null
' HByte Bits 3, 2, 1, 0
OUTPUT = ADR AND &H0F
if OUTPUT > 0 then gosub show else gosub null
' HByte Bits 7, 6, 5, 4
OUTPUT = (CMD AND &HF0) SHR 4
if OUTPUT > 0 then gosub show else gosub null
' HByte Bits 3, 2, 1, 0
OUTPUT = CMD AND &H0F
if OUTPUT > 0 then gosub show else gosub null
beep 100,5,10:beep 100,5,10:beep 100,5,10
goto LOOP
'-------------------------------------------
' Funktionen
'-------------------------------------------
#show
' IN: OUTPUT
VAR = OUTPUT AND 8
if VAR = 8 then gosub LED1ON
pause 5
VAR = OUTPUT AND 4
if VAR = 4 then gosub LED2ON
pause 5
VAR = OUTPUT AND 2
if VAR = 2 then gosub LED3ON
pause 5
VAR = OUTPUT AND 1
if VAR = 1 then gosub LED4ON
pause 200
beep 100,10,100
gosub LEDSOFF
return
#null
gosub LED1ON:pause 5:gosub LED1OFF
gosub LED2ON:pause 5:gosub LED2OFF
gosub LED3ON:pause 5:gosub LED3OFF
gosub LED4ON:pause 5:gosub LED4OFF
pause 200:beep 100,10,100
return
...
Vielen Dank & Grüße