Hardware
This guide will help you understand how to access and manage hardware components in your robot using the HardwareManager class.
Hardware devices are defined in the driver station and following this naming scheme: <deviceType><index> Examples:
- Motor 0:
motor0 - Servo 1:
servo1 - Distance Sensor 2:
distanceSensor2 - Touch Sensor 3:
ts3
Accessing Motors
You can access motors using the motors property of HardwareManager. Motors have the power property that can be set to control the motor's power. Power values range from -1.0 to 1.0.
Example
val leftMotor = HardwareManager.motors[0]
val rightMotor = HardwareManager.motors[1]
leftMotor.power = 0.5
rightMotor.power = -0.5Accessing Servos
You can access servos using the servos property of HardwareManager. Servos have the position property that can be set to control the servo's position. Position values range from 0.0 to 1.0.
Example
val armServo = HardwareManager.servos[0]
armServo.position = 0.5Accessing Distance Sensors
You can access distance sensors using the distanceSensor property of HardwareManager. Distance sensors have the getDistance(unit) method that returns the distance in the specified unit.
Example
val frontSensor = HardwareManager.distanceSensor[0]
frontSensor.getDistance(DistanceUnit.CM)Accessing Touch Sensors
You can access touch sensors using the touchSwitches property of HardwareManager. Touch sensors have the isPressed property that returns true if the sensor is pressed.
Example
val touchSensor = HardwareManager.touchSwitches[0]
touchSensor.isPressedError Handling
If you try to access a hardware component that does not exist, an IllegalArgumentException will be thrown. You can handle this exception as needed.
Example
try {
val motor = HardwareManager.motors[10]
} catch (e: IllegalArgumentException) {
// Handle the error
}Accessing Named Hardware
To access named hardware devices using the HardwareManager class, you can use the HardwareArray class's get method with the device name as a parameter.
To use these, add -NAME to the end of the device name in the Driver Station configuration.
Examples would be:
- Motor 0 named
leftMotor:motor0-leftMotor - Servo 1 named
armServo:servo1-armServo - Distance Sensor 2 named
frontSensor:distanceSensor2-frontSensor - Touch Sensor 3 named
primary:ts3-primary
Example
val leftMotor = HardwareManager.motors["leftMotor"]
val armServo = HardwareManager.servos["armServo"]
val frontSensor = HardwareManager.distanceSensor["frontSensor"]
val touchSensor = HardwareManager.touchSwitches["primary"]Using Fallback
If you want to access a named hardware device with a fallback to an indexed device, you can use the get method with both the name and the fallback index. This automatically accounts for if a device with that name is not found.
Example
val leftMotor = HardwareManager.motors.get("leftMotor", 0)
val armServo = HardwareManager.servos.get("armServo", 0)
val frontSensor = HardwareManager.distanceSensor.get("frontSensor", 0)
val touchSensor = HardwareManager.touchSwitches.get("primary", 0)This approach ensures that if the named device is not found, the method will return the device at the specified fallback index.