Now let's try a program that makes the robot back up while you push and hold a whisker up against its breadboard post.
The first two blocks may look familiar now and are going to be at the start of all the navigation programs from here on out. First, the frequency out block makes a 3000 Hz, 1-second beep on the piezospeaker connected to P4. Remember, that's the brownout indicator that lets you know if the program restarts due to low batteries. The second is the Robot initialize block, which must be at the top of the program come before any Robot drive... blocks.
The rest of the code is inside a repeat forever loop. Two variables are declared next, each with a check PIN block attached. The variable left wheel stores the input state of the left whisker circuit connected to P7, and right wheel stores the input state of the right whisker circuit connected to P8. Remember, these whisker circuits provide active low outputs. If a whisker is pressed, the I/O pin connected to that circuit will sense 0 volts so that the check PIN block would provide a 0. If a whisker is NOT pressed, check PIN would provide a 1.
First thing in the loop, an If...do...else block checks to see if either whisker is pressed. The attached if condition blocks could be read as "if left wheel equals zero or right wheel equals zero, do..." The condition is built using a boolean comparison block set to or. Inside that are two compare value blocks, each individually checks whether a variable (left wheel or right wheel) equals zero.
If either whisker is pressed, the if condition is true, and the block enclosed by if...do gets executed. In this case, that's the Robot drive speed, with both wheels turning at -64 ticks per second causing the ActivitBot to back up.
If neither whisker variable stores a 0, the program execution skips the block enclosed by if...do and moves on to the block enclosed by else...if. There, a Robot drive speed left 0 right 0 block makes both wheels stop turning.
Check early, check often! — Notice there is no pause block in the repeat forever loop above which allows the loop to execute very rapidly, monitoring the sensors and therefore updating which drive speed block is in use frequently. This allows the robot to quickly respond to sensor input with the appropriate motion. It's something to keep in mind when navigating with sensors.
...and don't block me! — Any code inside a loop that is blocking - code that does not let any other process proceed until complete - will slow down that loop. Examples of "blocks that block" are pause (ms) and frequency out. But, you can use this to your advantage by placing pause or frequency out right after robot drive speed to control how long the robot performs an evasive maneuver inside of a larger loop.
Here is a modified loop for your main function. It replaces the if...else statements with code that allows you to push one whisker at a time to make it turn away to one side or the other, or both whiskers to make it move straight backward.
Your ActivityBot should turn to the side away from whichever whisker is pressed. If you press both whiskers at once, it should back up.
Right now, if you press both of your robot's whiskers at the same time, it will awkwardly wiggle as it backs up with pivoting turns. Can you fix that?