Code Architecture: Command-Based vs. State Machines
Stop writing spaghetti code. How to organize complex subsystems using Finite State Machines.
Code Architecture: Command-Based vs. State Machines
In rookie code, everything is in one giant loop() function.
if (buttonA) { intake.power(1); }
This works for pushbots. It fails for champions.
The Finite State Machine (FSM)
Define “States” for your subsystems using Java Enums.
Example: Intake System
- IDLE: Motor off. Arm up.
- INTAKING: Motor on. Arm down.
- TRANSFER: Motor reverse. Arm up. Indexer open.
- JAMMED: Current spike detected. Pulse motor.
The Logic
Your loop simply checks: if (state == INTAKING) { doIntakeThings(); }
Transitions happen based on sensors or timers.
Command-Based (FTCLib)
This is a library structure (borrowed from FRC) where “Commands” are objects.
new IntakeCommand(intakeSubsystem).schedule();It handles the scheduling and concurrency for you.
Conclusion
For most FTC teams, State Machines are the sweet spot. They are easy to write, easy to debug, and powerful enough to automate complex actions like “Intake -> Transfer -> Ready to Fire”.
Level Up Your Season
Dominate the competition with our other powerful tools.
FTC Secrets
The most comprehensive analytics platform for FTC. Analyze match data, scout teams, and uncover winning strategies with deep insights.
Analyze Now →FTC Coach
Your hyper-personalized assistant for the season. Master your engineering portfolio and ace judging preparation with AI-powered guidance.
Get Coached →