Lab
4Pre: Arduino embedded coding
(continued from successful LabVIEW DIO VI)
2013: We have 5 dedicated DE-11-Arduino-LabVIEW setups labelled with computer names and intended to be connected to those computers only. The dedicated Arduino cards can then be instantly recognized by their respective computers, and come up with definite COM ports (instead of a computer "installing new hardware" after seeing an unfamiliar card. The cards should work perfectly well without you having to adjust any wires.
You'll see a LabVIEW green connector CB-68LP with wires running to a STD socket plugged onto a DE-11 card on which a white breadboard has a blue Arduino card mounted, and a 7406 TTL hex inverter chip. The Arduino card hosts one end of a USB A-B cable going into a USB port of the computer. The LabVIEW connector will have a 68-pin cable running to the 6024E card, as usual...
These dedicated setups have been tested with Lab4_TST.vi and Lab4pre13a.ino software.
The dedicated computers are
SINK (095)
PHONE (095)
STONEHENGE (097)
RIN (097)
BRONCOS (097)
The Arduino card shown does not have a screwshield (the
2012-- versions do) which prevents wire breakage in the socket holes...
You may want to make sure
you can trace the following connections from the LabVIEW 68LP green connector
screw card to Arduino pins on its screw shield: (D stands for digital...)
D0 screw 52 to Arduino D pin 6 OUTPUT
from Arduino: LEFT motor direc control
D1 screw 17 to Arduino D pin 7 OUTPUT
from Arduino: RIGHT motor
direc control
D2 screw 49 to Arduino D pin 4 OUTPUT
from Arduino: LEFT
motor
inhibit (HI)
D3 screw 47 to Arduino D pin 5
OUTPUT from Arduino: RIGHT motor
inhibit (HI)
D4 screw 19 to Arduino D pin 8 INPUT
to Arduino: LEFT
bumper switch (active LO)
D5 screw 51 to Arduino D pin 9 INPUT
to Arduino: RIGHT
bumper switch (active LO)
D6 screw 16 to Arduino D pin 2 INPUT
to Arduino: V-Switch for START of
ON pp cycle
D7 screw 48 to Arduino D pin 3 INPUT
to Arduino: Backup switch
Don't forget to ground properly
the Arduino board to pin 53 (GND) of the LabVIEW connector
card.
Example: If the left bumper switch (D4) is flipped down then the right motor LED (D1) will go OFF to represent the right wheel reversing direction of rotation...
1. The code will run an infinite loop that is continually waiting for virtual switch D6 to be flipped up to start the pp loop. In that WAIT FOR START state the 4 indicator lights on the left of the front panel are LOW.
The left-most lights, L0 and L1, represent the directions of the left and right motors respectively, with both ON meaning forward, (if the L2 and L3 lights are also ON, they represent that the motors themselves are ON).
2. After the START signal is received, all 4 lights will come on (green) and cannot be influenced for the next 3 seconds.
3. If no other
switches are flipped, the code will run 25 seconds, After 25 seconds all lights
will go out again while the code waits for another START flick. Serial.print
will show the pp count.
4.
If after 3 seconds ON the "left" switch (D4) is flicked ON and OFF
you will see the second green light go on for 1 sec; if the "right"
switch (D5) is flicked the first green light will go on for 1 second.
5. if D6 is turned off before the 25 seconds are up, then the motors will be
inhibited (both L2 and L3 off) until the counting will stop.
Now your final challenge for Lab4Pre:
To repeat: D6 represents the V-switch on the back of the rover, and flipping
it to its center position is the start signal. Let D4, D5 represent proximity
switches for the front left and right sides of rover; Let L0 and L1 represent
the directions of the wheels left and right. For now, let L2 and L3 ON represent
signals to uninhibit the left and right motors respectively. (Inhibit
means the motor stops and "relaxes": offers no resistance to turning).
Modify your version of the default code so that when
a left or right wall is detected (after rover being on for 3 seconds) the rover
1. Stops for one second
2. Backs up for one second
3. Stops for another second
4. Turns to the center (CW for left, CCW for right wall) for one second
5. Stops again for one second
6. Goes Forward until it hits another wall or time is up or (see below) D3 in
switched ON.
thus we will see 3 stops during the turn maneuver
Also, arrange that switch D7 turned ON causes the
rover to
1. Stop for 2 seconds (motors inhibited)
2. Go CONTINUOUSLY backwards until the D7 is turned OFF. If D7 is OFF
then the rover will not go backwards (unless it hits a wall).
D3 is pin 3, which has been declared as variable BU_SWTCH
near the top of the code. You need to insert an "if" test on pin 3,
or perhaps use a while loop...to achieve the backup function...pin D3 is the
arduino side...on the LabVIEW side it's D7... you may want to involve a while
loop here... .
Possible FTQ:
Explain what changes (if anything) after one line of your code is commented
out.
Free Advice: re-compile ("verify") frequently so you don't have too many keystrokes to consider if an error pops up in compling...
See Quickie C file for understanding of some default code. Consider describing your problem as a series of STATE changes: Forward to Inhibit to Reverse to Inhibit to Turn to Inhibit to Forward. Study the default code and its comments for what and how the C instructions work. Attend to assignment statement format, and if statement structure.
The STD blue socket pinout:
Arduino Uno top view:
Note the Analog-in pins at the bottom right...
Schematic of Arduino-7406 card