I'm hoping that you guys and Miss whippy, sorry Mel can tell me why the following code won't work correctly.
Having managed to sort out the delay for the debounce I had each LED bing turned on, latched and turned off by activation of the corresponding reed switch - Great !
However I now want to evolve the code so that the following happens. The siding has the buffer at the left, and trains enter from the right. A reed switch (sw1) is placed at the start of the siding (on the right), a train enters the siding and activated sw1 and LED1 is lit. The train continues to the end of the siding where it activates the second reed switch (sw2) and thus LED2 is lit, and the operator shuts off the power. So far so good.
Now the operator can re-arrange the train and place the loco at the other end ready to go back on the main layout. When it does sw1 is then activated again, but this time I need it to clear both LED1 and LED2. Ok I thought, lets simply have a new varible (swset5) that is toggled only when swset1 and swset2 are high.. but it won't work. activating sw1, then sw2, then sw1 again just turns off LED1, LED2 remains lit
Here is my code (I've yet to try the BUTTON command, but maybe that will happen when I come to tidy up the code ??)
Code:
@INTRC_OSC_NOCLKOUT
@WDT_ON
@PWRT_ON
@MCLR_OFF
@BOD_ON
@LVP_OFF
@CPD_OFF
@PROTECT_OFF
CMCON=7
TRISB=%00000011 'set RB0 & 1 as input and the rest output
SW1 var PORTB.0 'switch input pin 6 (RB0)
SW2 var PORTB.1 'switch input pin 7 (RB1)
LED1 var PORTB.4 'LED1 on pin 10 (RB4)
LED2 var PORTB.5 'LED1 on pin 11 (RB5)
Swset1 var bit
Swset2 var bit
Swset5 var bit
low led1
low led2
Swset1=0
Swset2=0
swset5=0 'Var swset is set low
Main:
if SW1=0 then 'If switch is LOW (Grounded) then
Toggle Swset1 'change swset1 from 0 to 1
pause 500 'debounce delay
endif
if SW2=0 then 'If switch is LOW (Grounded) then
Toggle Swset2 'change swset2 from 0 to 1
pause 500 'debounce delay
endif
If Swset1=1 then 'if swset1 is 1
high led1 'then turn on RB4 (and hence the LED)
else
low led1 'else, LED is off
endif
If Swset2=1 then 'if swset2 is 1
high led2 'then turn on RB5 (and hence the LED)
else
low led2 'else, LED is off
endif
If swset1=1 and swset2=1 then
toggle swset5
endif
if swset5=1 and sw1=0 then
low led1
low led2
else
high led1
high led2
endif
End
I have even tried removing the "else" part at the end of the code so it reads
Code:
If swset1=1 and swset2=1 then
toggle swset5
endif
if swset5=1 and sw1=0 then
low led1
low led2
endif
But that still fails to work correctly.
Any advice guys and gals ??
Bookmarks