ok so I’ve used team 358s example on a toggle switch and it works great except what i want the toggle to do is run a motor until a limit switch is pressed, but if the toggle is hit again reverse the same motor, looking for a different limit switch and stop.
At first I thought that it was the limit switches, because for some reason labview is reading normally open switches as true, but in programming as the values were easy to reverse it still wasnt reading my limit switches.
Ok so ive realized that the limit switches aren’t being ignored the only problem is that they have to be held down and then the toggle must be activated again to stop the motor I’m so confused
Describing your setup as well would probably help.
In pseudocode, it would be something like:
direction = forward
toggle_prev = false
loop:
if report_state(limit_switch_1):
stop(motor)
direction = backward
if report_state(limit_switch_2):
stop(motor)
direction = forward
if report_state(toggle) != toggle_prev:
if report_state(limit_switch_1) or report_state(limit_switch_2):
set(motor, direction)
## Keep in mind this will only work if set() is a state function
## (that is, if set() doesn't have to be looped to keep the motor running())
elif report_state(motor) == running:
stop(motor)
toggle_prev = report_state(toggle)
delay 100
The last delay statement is crucial. Here’s why: You start from the center, hit the toggle to move forward, hit a limit switch, stopping the motor Then you hit the toggle again to run it backwards, but if the loop runs fast enough, the limit switch will still be triggered, stopping the motor again and reversing the direction. As a result, you’ll be left oscillating at that limit switch. The delay lets the motor run long enough so that the limit switch doesn’t stay triggered when the loop repeats.