Recently I’ve been experimenting with sending status codes to an Arduino from the RoboRio. I’ve so far tried toggling serial from the MXP to the arduino, and serial over USB between them. Neither of these have worked yet. I was wondering if any teams had input on how to send single byte status packets?
Current robot code (java):
arduino = new SerialPort(19200,SerialPort.Port.kUSB);
...
byte mode1 = 0; //////// 0b<red><blue><fms><auton><teleop><disabled><enabled><attached>
if (ds.getAlliance() == DriverStation.Alliance.Red) mode1 |= 0b10000000;
if (ds.getAlliance() == DriverStation.Alliance.Blue) mode1 |= 0b01000000;
if (ds.isFMSAttached()) mode1 |= 0b00100000;
if (ds.isAutonomous()) mode1 |= 0b00010000;
if (ds.isOperatorControl()) mode1 |= 0b00001000;
if (ds.isDisabled()) mode1 |= 0b00000100;
if (ds.isEnabled()) mode1 |= 0b00000010;
if (ds.isDSAttached()) mode1 |= 0b00000001;
byte] mode2 = {mode1};
arduino.write(mode2, 1);
The problem is that the instantiation of the SerialPort object causes the robot code to error and restart. The exact error can’t be copied out of the DS, but it’s something along the lines of this:
RuntimeException: HAL: -VISA: Resource not found at [SerialPortJNI.serialInitializePort]
Has anyone gotten Rio-to-Arduino comms to work using Serial?
I got it working. I never tried an Uno or Mega, but the Pro with the FTDI USB to Serial does work. The Uno or Mega might work, but the Uno clone using a CH340 or CH341 USB to Serial did not work.
How do you guys specify which USB port of the RoboRIO to use? We have a webcam and an Arduino board plugged into the two RoboRIO ports. I can be wrong but it seems that the robot code tries to talk to a wrong device sometimes. Can I do something more specific than kUSB? Thanks.
USB doesn’t really have “ports.” The two ports on the roboRIO are basically the same hole, if you will, much like putting a USB hub into one doesn’t make 6 new addressable spaces, it’s just more holes on the bus.
Your Arduino will show up as /dev/ttyUSB0 or /dev/ttyACM0 in some cases, like a Mega.
The webcam will show up as /dev/video0, then /dev/video1, etc, as you add cameras assuming they’re supported in Video4Linux.
The addressing is basically the responsibility of the OS unless you want to get far deeper into USB specs than I have ever bothered.