Skip to main content
WPILibJ is the Java implementation of WPILib, providing a comprehensive framework for programming FRC robots in Java.

Package Structure

The main package is edu.wpi.first.wpilibj and contains all core robot programming APIs.

Core Robot Classes

TimedRobot

Event-driven robot framework with periodic callbacks

DriverStation

Interface to FMS and driver station data

RobotController

Access to roboRIO system-level functions

RobotBase

Base class for all robot programs

Hardware I/O

Digital I/O

ClassDescription
DigitalInputRead digital input signals
DigitalOutputControl digital output signals
CounterCount digital pulses and edges
EncoderQuadrature encoder support
DutyCycleRead PWM duty cycle signals
DutyCycleEncoderAbsolute encoders using duty cycle

Analog I/O

ClassDescription
AnalogInputRead analog voltage inputs (0-5V)
AnalogOutputGenerate analog voltage outputs
AnalogEncoderAnalog absolute encoder support
AnalogPotentiometerPotentiometer input with scaling
AnalogTriggerTrigger actions based on analog thresholds

Motor Controllers

ClassDescription
PWMSparkMaxControl REV Robotics SPARK MAX
PWMTalonSRXControl CTRE Talon SRX
PWMVictorSPXControl CTRE Victor SPX
SparkGeneric SPARK controller
TalonGeneric Talon controller
VictorSPVictor SP controller
ServoStandard servo control

Pneumatics

ClassDescription
CompressorControl pneumatic compressor
SolenoidSingle solenoid valve control
DoubleSolenoidDouble solenoid valve control

Sensors

Gyroscopes

  • ADIS16448_IMU - Analog Devices IMU
  • ADIS16470_IMU - Analog Devices IMU
  • ADXRS450_Gyro - Analog Devices SPI gyro
  • AnalogGyro - Analog gyroscope

Accelerometers

  • ADXL345_I2C - I2C accelerometer
  • ADXL345_SPI - SPI accelerometer
  • ADXL362 - SPI accelerometer
  • BuiltInAccelerometer - roboRIO accelerometer

TimedRobot

The TimedRobot class provides a framework where methods are called periodically at a fixed rate.
package edu.wpi.first.wpilibj;

public class TimedRobot extends IterativeRobotBase {
  // Default period is 20ms (50Hz)
  public static final double kDefaultPeriod = 0.02;
  
  // Constructor
  public TimedRobot();
  public TimedRobot(double period);
  
  // Add custom periodic callback
  public void addPeriodic(Runnable callback, double periodSeconds);
  public void addPeriodic(Runnable callback, double periodSeconds, double offsetSeconds);
}

Example Usage

import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.motorcontrol.Spark;

public class MyRobot extends TimedRobot {
  private Spark motor;
  
  @Override
  public void robotInit() {
    motor = new Spark(0);
  }
  
  @Override
  public void teleopPeriodic() {
    // Called every 20ms during teleop
    motor.set(0.5);
  }
  
  @Override
  public void disabledInit() {
    motor.set(0.0);
  }
}

DriverStation

Provides access to driver station data and FMS information.
package edu.wpi.first.wpilibj;

public final class DriverStation {
  // Get singleton instance
  public static DriverStation getInstance();
  
  // Robot state
  public static boolean isEnabled();
  public static boolean isDisabled();
  public static boolean isAutonomous();
  public static boolean isTeleop();
  public static boolean isTest();
  
  // Alliance and location
  public static Optional<Alliance> getAlliance();
  public static OptionalInt getLocation();
  
  // Match info
  public static double getMatchTime();
  public static MatchType getMatchType();
  public static int getMatchNumber();
  
  // Joystick input
  public static double getStickAxis(int stick, int axis);
  public static boolean getStickButton(int stick, int button);
  public static int getStickPOV(int stick, int pov);
  
  public enum Alliance { Red, Blue }
  public enum MatchType { None, Practice, Qualification, Elimination }
}

AddressableLED

Control addressable RGB LED strips.
package edu.wpi.first.wpilibj;

public class AddressableLED implements AutoCloseable {
  public AddressableLED(int port);
  
  public void setLength(int length);
  public void setData(AddressableLEDBuffer data);
  public void start();
  public void stop();
}

public class AddressableLEDBuffer {
  public AddressableLEDBuffer(int length);
  
  public void setRGB(int index, int r, int g, int b);
  public void setHSV(int index, int h, int s, int v);
  public void setLED(int index, Color color);
}

Filesystem

Access robot filesystem paths.
package edu.wpi.first.wpilibj;

public final class Filesystem {
  // Get deploy directory path
  public static Path getDeployDirectory();
  
  // Get operating directory
  public static Path getOperatingDirectory();
  
  // Check if running on real robot
  public static boolean isReal();
}

CAN Communication

ClassDescription
CANLow-level CAN bus communication
CANDataCAN message data container

Data Logging

ClassDescription
DataLogManagerManage robot data logging
AlertCreate and manage robot alerts

Utility Classes

ClassDescription
TimerTiming and delay utilities
WatchdogMonitor loop timing
NotifierSchedule callbacks
EventLoopEvent-driven programming
AsynchronousInterruptHandle hardware interrupts

Source Code

View the full source code on GitHub:

WPILibC API

C++ implementation of WPILib

Command Framework

Command-based programming framework

HAL API

Hardware Abstraction Layer

WPIMath

Mathematics and control libraries

Build docs developers (and LLMs) love