Hi.
My team is planning to make a driver station with 5 LED lights that correspond to certain positions on a robot. We want to use an arduino to control these lights, but we are unsure on how to do this.
When looking up how to communicate with the robot, the most common result was using serial on the Roborio itself. This is impossible in this situation as the arduino will be connected to our driver station laptop. Is this any way to send output to the arduino from the driver station?
If you check out your KoPs you’ll find a small box from Texas Instruments containing an MSP430F5529 LaunchPad. We got these into every KoP for making awesome operator interfaces just like you want!
There is a utility that comes with the NI Update called “Gamepad Tool” which will program the LaunchPad to act as a USB HID gamepad. Add a few buttons, and the IO pins on the LaunchPad map directly to the gamepad functions. We also extended the USB HID interface to include indicator lights, and NI even added the functionality to the robot code so you can access them directly!
If you have any questions, feel free to PM me, or email the support line on the wiki (it goes to me and a few other TI engineers) and we’ll be happy to help.
I think the issue is there really isn’t an obvious way to have the robot talk to a device connected to the computer.
I wonder if NI VISA would recognize a USB to RS-232 converter as a com port. If it did you could send strings to the device using the smart dash based on values you get of the from the robot.
The intent with the new driverstation is to support HID gamepads as the ‘obvious’ way to communicate from the robot to the driver station, and a HID compatible microcontroller or a gamepad can be used to get custom input/output. This year’s WPILib API has functions to set outputs to the driver station which is communicated directly to the joystick.
The HID compatible Arduinos, like the Leonardo++, will work for inputs by default, however the libraries do not have support for HID outputs, meaning out of the box you would not be able to set indicator LEDs. The underlying software would need to be modified to add this support.
The LaunchPad in the kit can be loaded with prebuilt binaries to support input and outputs out of the box. So you can connect it to the driver station and hook both buttons and indicator LEDs to the board, and use the WPILib API to turn on/off the LEDs. The only downside is that if you want to edit the code the only option is the full eclipse based Code Composer. The Arduino forked environment for the LaunchPad (Energia) doesn’t work for HID.
VISA will recognize the USB to RS-232 converter properly so this approach would work. You just need to be careful with enumerating the correct port (and make sure the Smart Dashboard ports aren’t blocked at the event).
Would you be satisfied with five indicators on the Dashboard screen instead of physical LEDs? Doing that is trivial, and in fact there are already eight of them on the default Dashboard that your robot can control with very simple code.
I set the text to bold that I wanted to make sure wasn’t missed.
This is how we created our drives station “Button Box” this year.
The Launchpad has 3 different possible configurations right from the KOP.
The differences in the 3 configurations are based on how many inputs vs. outputs that are available. The combinations of I/O are: 11/11, 16/6, 20/2.
All 3 combinations also have 8 analog inputs.
As an example, we started out needing 18 inputs (later refined to only 14) from our button box. So, the configuration we chose was 20/2.
We the used the 2 outputs to interface to a Arduino Nano inside the button box to control a string of 60 WS2812 LEDs.
While the robot is disabled, output 1 and 2 remain low. This tells the Adruino to run a demo loop that just cycles through a variety of lighting patterns.
Once the robot goes enabled, output 1 goes high. The Arduino then looks at output 2 to determine which pattern to display. Output 2 HIGH means Red Alliance, LOW means Blue Alliance. The LEDs then just display the Alliance color.
This is a very simple use of the outputs to drive LEDs. Discrete LEDs can also be driven directly by the Launchpad, but care must be taken to not exceed the current ratings of the board.
my team made a control box using the Labview LVH-LINX library (you can see more about them in this link )
we planted the code to read the data from the arduino (we used the UNO ) in our dashboard, sanding the data to the robot using the SmartDashbord VI’s
i think that the same method will allow you to set outputs to an arduino…
Hi Everyone,
Thanks for all your responses. My team has switched to the launch pad for our driver station, so we should be fine.
However i’m a little curious about this:
How specifically would I be able to send information using smart dashboard to the serial on the arduino?
Assuming you’ve used or know how to use smart dashboard, you need a way to communicate through serial to the arduino in LabVIEW. Two good methods I can think of to use for this.
The first one is what reuven mentioned in the post above. The LVH-LINX library is a neat library which puts a generic firmware image on the arduino, and uses the serial port to access the pariphrials on the device. It is not as fast as writing code directly on the arduino, but it makes the interface easier. Before the season started I had LINX working on the LaunchPad as well, and the timing between commands was close to ~5ms. So its great for low speed tasks. I’m also not sure that you would be able to use this AND the HID protocol with the driver station.
The second method would be to do all the programming on the ardunio/LaunchPad and send data back data through the serial port using the standard ‘Serial.Print()’ commands. On the LabVIEW side you can use the built in serial port functions found at Instrument I/O --> Serial. From here you just need to interpret the data you sent from the arduino and convert it to send over the smartdashboard. I don’t know if you can do both this AND the HID protocol on the arduino, however the LaunchPad has a built in USB hub which allows it to use the serial port AND the HID at the same time.
For both C++ and Java the Joystick class has:
Joystick.setOutput(uint8_t outputNumber, bool value)
Set a single HID output value for the joystick.
Parameters
**outputNumber ** The index of the output to set (1-32)
**value **The value to set the output to
and
Joystick.setOutputs(uint32_t value)
Set all HID output values for the joystick.
Parameters value The 32 bit output value (1 bit for each output)