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 ??)
I have even tried removing the "else" part at the end of the code so it readsCode:@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
But that still fails to work correctly.Code:If swset1=1 and swset2=1 then toggle swset5 endif if swset5=1 and sw1=0 then low led1 low led2 endif
Any advice guys and gals ??




Bookmarks