IR code to switch relay "twitchy"
I have been working on this for two days and so far so good. I'm toggling a relay on/off thru a flip-flop (CD4013). I can change states with a tact. switch and with a BS2 Homework Board with IR.
I am using some of the code that I found for the BoeBot IR Remote kit and it works well, however when the button is held down a little too long it will just switch to ON then OFF real fast. Sometimes I find myself clicking a couple times to get it in the state that I want. What I want it to be is if the button is held down it will only switch once. I had tried PULSOUT but I had the same results.
I'm not sure how much of the code is necessary so I will paste the whole thing I am using at the moment. I'm not the greatest at BASIC but if there is another command I should look into, someone should be able to point me in the right direction.
I am using some of the code that I found for the BoeBot IR Remote kit and it works well, however when the button is held down a little too long it will just switch to ON then OFF real fast. Sometimes I find myself clicking a couple times to get it in the state that I want. What I want it to be is if the button is held down it will only switch once. I had tried PULSOUT but I had the same results.
I'm not sure how much of the code is necessary so I will paste the whole thing I am using at the moment. I'm not the greatest at BASIC but if there is another command I should look into, someone should be able to point me in the right direction.
' Ir Remote Application - IrRemoteCodeCapture.bs2
' Process incoming SONY remote messages & display remote code.
' {$STAMP BS2}
' {$PBASIC 2.5}
' SONY TV IR remote variables
irPulse VAR Word ' Stores pulse widths
remoteCode VAR Byte ' Stores remote code
DEBUG "Press/release remote buttons..."
DO ' Main DO...LOOP
Get_Pulses: ' Label to restart message check
remoteCode = 0 ' Clear previous remoteCode
' Wait for resting state between messages to end.
DO
RCTIME 9, 1, irPulse
LOOP UNTIL irPulse > 1000
' Measure start pulse. If out of range, then retry at Get_Pulses label.
RCTIME 9, 0, irPulse
IF irPulse > 1125 OR irPulse < 675 THEN GOTO Get_Pulses
' Get Data bit pulses.
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT0 = 1
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT1 = 1
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT2 = 1
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT3 = 1
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT4 = 1
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT5 = 1
RCTIME 9, 0, irPulse
IF irPulse > 300 THEN remoteCode.BIT6 = 1
' Map digit keys to actual events.
IF (remoteCode = 54) THEN HIGH 0
PAUSE 5000
LOW 0
DEBUG CLS, ? remoteCode
LOOP

