Implements STM32F7 non-blocking driver for HC-SR04 ultrasonic ranger with TIM1 input capture. Supports distance measurement via echo pulse width analysis. Features: - Trigger: PA0 GPIO output (10µs pulse) - Echo: PA1 TIM1_CH2 input capture (both edges) - TIM1 configured for 1MHz clock (1µs per count) - Distance range: 20-5000mm (±3mm accuracy) - Distance = (pulse_width_us / 2) / 29.1mm - Non-blocking API with optional callback - Timeout detection (30ms max echo wait) - State machine: IDLE → TRIGGERED → MEASURING → COMPLETE/ERROR API Functions: - ultrasonic_init(): Configure GPIO and TIM1 - ultrasonic_trigger(): Start measurement - ultrasonic_set_callback(): Register completion callback - ultrasonic_get_state(): Query current state - ultrasonic_get_result(): Retrieve measurement result - ultrasonic_tick(): Periodic timeout handler Test Suite: - 26 passing unit tests - Distance conversion accuracy (100mm-2000mm) - State machine transitions - Range validation (20-5000mm boundaries) - Timeout detection - Multiple sequential measurements Integration: - ultrasonic_init() called in main() startup after servo_init() - Non-blocking operation suitable for autonomous navigation/obstacle avoidance Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Merge pull request 'feat(perception): QR code reader on CSI surround frames (Issue #233)' (#237) from sl-perception/issue-233-qr-reader into main
Description
SaltyLab self-balancing bot firmware (STM32F722)
Languages
Python
67.1%
C
11.4%
JavaScript
9.2%
OpenSCAD
7.8%
HTML
1.5%
Other
2.9%