View Single Post
  #1   Spotlight this post!  
Unread 04-04-2014, 21:30
NWChen's Avatar
NWChen NWChen is offline
Alum
no team
 
Join Date: Oct 2012
Rookie Year: 2012
Location: New York City
Posts: 205
NWChen is a splendid one to beholdNWChen is a splendid one to beholdNWChen is a splendid one to beholdNWChen is a splendid one to beholdNWChen is a splendid one to beholdNWChen is a splendid one to beholdNWChen is a splendid one to behold
Dual Ultrasonic error

Our robot has two VEX ultrasonic rangefinders, each connected to separate DIO ports on the digital sidecar. We're using the command-based template.

In a subsystem they're declared as:
Code:
private Ultrasonic wallSonar, ballSonar;
and in the constructor of the subsystem,
Code:
ballSonar = new Ultrasonic(Map.ARM_SONAR_INPUT, Map.ARM_SONAR_OUTPUT);
ballSonar.setEnabled(true);
ballSonar.setAutomaticMode(true);
wallSonar = new Ultrasonic(Map.LAUNCHER_SONAR_INPUT, Map.LAUNCHER_SONAR_OUTPUT);
wallSonar.setEnabled(true);
wallSonar.setAutomaticMode(true);
Ultrasonic.java in WPILib appears to be designed to handle >1 Ultrasonic instance, but when we try to run this code it throws an IllegalThreadStateException.

Things we tried so far:
- Changing the order of assignment (wallSonar before ballSonar, ballSonar before wallSonar); still throws IllegalThreadStateException
- Moving one of the Ultrasonic sensors to a different subsystem; still throws IllegalThreadStateException.
- Declaring only one of the Ultrasonic sensors; having only one Ultrasonic sensor throws no errors, and the sensor works as expected.
- Unit testing with SimpleRobot, like this. Both sensors worked as expected, with no errors thrown.

Any idea why we can't declare/use two Ultrasonic sensors?

Thanks to Jeanne Boyarsky from team 694 at NYC today for helping us try to fix this.
__________________
2012 - 2015 • Team 2601


Last edited by NWChen : 04-04-2014 at 21:48.
Reply With Quote