I got a problem with my IR sensors code. Everything works ok until the robot reaches the end of the white line. I thought i’d be cleaver and wrote an if statement that says if rc_sw 1,2 & 3 =0 then go straight, however the robot goes into a left hand loop.
Any help or suggestions would be greatly appreciated!!
Here is the code I wrote:
FullAutoMode:
if rc_sw2=1 then straight:
if rc_sw1=1 & rc_sw3=0 then turnleft:
if rc_sw3=1 & rc_sw1=0 then turnright:
if rc_sw1 & rc_sw2 & rc_sw3=0 then straight:
goto endir:
I believe the problem is centered around improper use of the &. Try replacing them with the keyword AND as well as splitting up that last if into multiple equlaties joined with the AND keyword.
if rc_sw2=1 then straight:
if rc_sw1=1 AND rc_sw3=0 then turnleft:
if rc_sw3=1 AND rc_sw1=0 then turnright:
if rc_sw1=0 AND rc_sw2=0 AND rc_sw3=0 then straight:
*Originally posted by Tazlikesrobots *
**Thanks for the help. It does not make a whole lot of sence since “&” and “and” are the same thing, however it works now!
**
They actually aren’t AND is the logical version (like C’s && if that helps) whereas & is the bitwise version (like C’s &). For more detail, see this post.
Taking your previous code, assume sw1=1, sw2=0, sw3=1. Evaluate left to right:
sw1 & sw2 & sw3 => 1 & 0 & 1, which is 0. Then apply the comparison evaluator, 0=0, which evaluates to true. Thus if any of the switches are 0, this will evaluate to true.