Every sensor on an FRC robot reports through one of a few electrical interfaces, and knowing them helps you wire and program correctly the first time.
Digital I/O (DIO)
The roboRIO has 10 built-in DIO ports (0-9). On the roboRIO these ports operate at 5V logic: a 'high' signal is ~5V and 'low' is 0V (the input threshold reads high above ~2.0V and low below ~0.8V). DIO is used for:
- Switches (limit switches, beam breaks) that are simply open or closed.
- Quadrature encoders, which send two fast on/off pulse trains.
- Duty-cycle (PWM) absolute encoders, where the width of a repeating pulse encodes position.
Every DIO port has a built-in pull-up resistor between power and signal, so a normally-open switch wired between signal and ground reads true (high) when open and false (low) when pressed — a detail that trips up many rookies.
Analog Input
The roboRIO has 4 built-in analog input channels (0-3) that read a continuous voltage from 0-5V with 12-bit resolution. Analog sensors output a voltage proportional to what they measure — for example, an analog potentiometer or an analog absolute encoder where 0V = 0 degrees and 5V = one full rotation.
CAN bus
The CAN (Controller Area Network) bus is a single daisy-chained, terminated pair of wires that connects many smart devices: motor controllers (Talon FX, Spark MAX/Flex), the Power Distribution Hub/Panel, the Pigeon 2.0 IMU, the CTRE CANcoder, and CAN distance sensors. Each device has a unique ID. CAN is powerful because:
- A device can do its own processing and report rich data (position, velocity, temperature, current).
- You add devices without using up roboRIO ports.
- Modern CTRE devices support CAN FD for higher bandwidth.
The trade-off is bus utilization and latency: too many devices polled too fast can saturate the bus, so frame/update rates are configurable.
Choosing an interface
Use DIO for switches and most encoders, analog for simple potentiometers, and CAN for anything that benefits from on-device smarts or that you want to read without wiring back to the roboRIO. As a rule of thumb, prefer the interface the manufacturer designed the sensor for, and always confirm a sensor's logic level is compatible before wiring it to a 5V DIO port.
Key takeaways
- The roboRIO offers 10 built-in DIO ports, 4 built-in analog inputs, and a CAN bus; pick the interface a sensor was built for.
- roboRIO DIO ports are 5V logic with built-in pull-ups, so an open normally-open switch reads true and a pressed switch reads false.
- CAN devices do their own processing and report rich data, but the bus has finite bandwidth you must budget.
Lesson quiz
RequiredAnswer all 3 questions correctly to complete this lesson.
01.On the roboRIO, which type of port is best suited for a sensor that reports a continuously varying value as a proportional voltage, such as a potentiometer or an analog absolute encoder?
02.How is the CAN bus physically wired on an FRC robot?
03.A normally-open switch is wired between a roboRIO DIO signal pin and ground. What does the port read while the switch is open (not pressed)?
Answer every question to submit.
All 51 lessons in Programming, Controls & Sensors
- Not started:Mini-Project: A Closed-Loop Elevator with Motion Magic
- Not started:Mini-Project: A Velocity-Controlled Shooter on REVLib
- Not started:Mini-Project: A Teleop Swerve Drive Subsystem
- Not started:Mini-Project: An Autonomous Routine with PathPlanner
- Not started:Mini-Project: Vision-Aligned Scoring with Limelight
- Not started:State-Space Control and Kalman Filtering
- Not started:Log Replay Architecture with AdvantageKit
- Not started:Advanced Pose Estimation: Multi-Tag Fusion and Standard Deviations
- Not started:Robot Coordination, Alerts, and Operator Feedback
- Not started:Case Study: Hardening Software Before an Event