Log in

View Full Version : Trouble programming Digital I/O toggle switches in C++


drhall
01-04-2009, 15:38
We are having some trouble trying to get toggle switches to work for switching between autonomous modes. The switches are mounted directly to our robot and connected to digital I/O ports 1,2, and 3. We are progamming in Wind River using C++ and I just can't get the code to work. We hooked up a multimeter to the switches (which we have hooked up as ground, signal and power) and we are getting the expected 5V one way and 0 the other.

Here's the code, any help is greatly appreciated!!!


{
m_disabledPeriodicLoops = 0; // Reset the loop counter for disabled mode
ClearSolenoidLEDsKITT();
// Move the cursor down a few, since we'll move it back up in periodic.
printf("\x1b[2B");


DriveDirection = 1;
DriveSpeed = 1;
if (Switch1->Get() == 0) {

// stuff to do if Switch1 (left) is on
// Set direction to positive 1 for left
DriveDirection = 1.0;
DriveSpeed = 1.0;
}
else if (Switch2->Get() == 0)
{
//not yet
}
else if (Switch3->Get() == 0) {
// stuff to do if Switch3 (right) is on
// Set direction to negative 1 for right
DriveDirection = -1.0;
DriveSpeed = 1.0;
}

}







That is what's in void DisabledInit. We are then using the DriveDirection variable in AutonomousPeriodic.

Thanks!

Cuse
01-04-2009, 15:49
Have you ever been able to read the switches?

You're certain that the code is reading the correct ports, etc.?

drhall
01-04-2009, 16:12
We aren't sure if we have been able to read switches. We are in the process of doing that right now. What kind of code would you reccomend we write to test this?

Thanks!

Bongle
01-04-2009, 16:19
My best suggestion would be to check when you instantiate the switches. If you use the simpler constructor for them, they might use a 'default' slot on the cRio that you do not expect.

I forget the exact function signature, but you might be doing
Switch1 = new DigitalInput(1); // initializes it to use channel 1 on slot pi

If you're doing that, try using the constructor that explicitly sets the slot to the cRio slot that you're using:
Switch1 = new DigitalInput(4,1); // uses slot 4, channel 1 (might use slot 1, channel 4. Check the DigitalInput.h file)

drhall
01-04-2009, 16:28
Alright we were just able to read the switch in teleop. Now we are working on getting it going for autonomous. Thank you for the help!

reversed_rocker
02-04-2009, 22:43
if you arent sure that the program is reading the toggle switch then i suggest:

printf("toggleswitch = %f \n",Switch1);

now if you go into the console it should give you a read out of the toggle switch if the program is actually recognizing it (while the code is running).

the code up above is assuming that you defined the switch as a float, which it looks like you should have because if you're reading a voltage it's on an analog input. if im wrong and for some reason the switch needs to be an int, change that %f to a %d. for the record, the structure for print statements goes:

printf("whateveryouwanttocallyourvariable = %f \n", variablename);

as i said before, %f changes to %d if the variable you're printing is an int rather than a float, bools also fall under %d