Embedded firmware challenges
Practice problems for embedded C, grouped by topic. Each challenge runs on an emulated STM32, nRF52 or ESP32 board in your browser and is checked by hardware-level tests. Many include a written walkthrough and a video.
17 challenges
Advanced Peripherals
Applied Integration
- Quiz Buzzer LockoutOn an Arduino Nano 33 BLE, run a three-team quiz buzzer: the first team to press lights its lamp, everyone else is locked out, and the quizmaster's reset opens the next round, even when a button is still held down.EasyNano 33 BLE · ArduinoWritten walkthrough
- Two-Hand Press ControlOn an Arduino Nano 33 BLE, start a stamping press only when both palm buttons are pressed within 500 ms of each other, stop it the moment either is released, and require both hands off before the next stroke.EasyNano 33 BLE · ArduinoWritten walkthrough
- Battery Module Cell Voltage CAN BroadcastRead four cell voltages from a UART bench harness, broadcast them and a computed pack summary on CAN1, and latch a fault output until a reset command arrives. Graded on the CAN frames a trusted node sees and the fault pin.MediumSTM32 · HAL
- Garage Door ControllerOn an Arduino Nano 33 BLE, run a garage door from one remote button, stop it at the limit switches, send a closing door back up when the photo-eye beam breaks, and raise a fault when the door jams.MediumNano 33 BLE · ArduinoWritten walkthrough
- Rocket Dual-Deploy Flight Computer (I2C)Wire an LIS2DS12 accelerometer over I2C and drive two pyro channels from it: payload separation at apogee, then a timed parachute deploy. Accelerometer telemetry and both output pins are checked.HardSTM32 · HAL
- Water Tank Pump ControlOn an Arduino Nano 33 BLE, fill a water tank between two float switches: filter out sloshing, keep the pump off between the floats, catch impossible float readings as a fault, and latch a dry-run fault if no water arrives within ten seconds.HardNano 33 BLE · ArduinoFree
Data Handling & Algorithms
- Rotary Encoder Position CounterOn an Arduino Nano 33 BLE, decode a mechanical quadrature handwheel so that each full click counts once in the right direction, while contact chatter, rocking and invalid transitions never count, and a push button zeroes the position.MediumNano 33 BLE · ArduinoWritten walkthrough
- Machine Event Log Ring BufferOn an Arduino Nano 33 BLE, build a black-box recorder for a packaging machine: debounce jam and guard-door events, keep the 8 newest in a ring buffer with timestamps, dump them oldest first on request, and clear the log with a long press.MediumNano 33 BLE · ArduinoWritten walkthrough
- Simon Memory GameOn an Arduino Nano 33 BLE, build the classic Simon game: a colour sequence that grows by one random colour per round, played back on three LEDs with exact timing, checked against debounced button presses, with a timeout and a score.HardNano 33 BLE · ArduinoFree
GPIO & Digital Outputs
Sensors
Timers & Interrupts
Timing & Program Flow
- Seatbelt Reminder LampOn an Arduino Nano 33 BLE, flash a belt warning lamp when the ignition is on and the belt stays unlatched for two seconds, and start the grace period over every time the situation begins again.EasyNano 33 BLE · ArduinoFreeWritten walkthrough
- Traffic Light With Night ModeOn an Arduino Nano 33 BLE, run a junction traffic light (red, red + yellow, green, yellow) on exact millis() timing that never drifts, and add a button that switches to a blinking-yellow night mode and back.MediumNano 33 BLE · ArduinoFree
- Three-Floor Elevator ControllerOn an Arduino Nano 33 BLE, control a small three-floor lift: remember floor calls, keep the car's direction and stop at called floors on the way, time the travel and the door, and drive the indicator panel lamps correctly.HardNano 33 BLE · ArduinoWritten walkthrough
UART Communication
New to embedded? Start with the roadmap: How to learn embedded systems