Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (14)
Included review availability: Your plan provides up to 2 included reviews per hour; 1 remains after this review. 📝 WalkthroughWalkthroughAdds a 16-expression animated OLED library, compressed asset generation and validation, an ESP32-C3 SSD1306 demo, native renderer tests, documentation, and CI checks. ChangesOLED expressions
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Feature Merge Risk: ⚪ Minimal · up to The optional OLED expression library and demo have no identified merge-blocking risk. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 5.71% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 35 functions across 7 files. (6 skipped: 6 unsupported.)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
This looks really cool! I should be able to test it on the actual robot on Thursday/Friday before we merge it. Looking forward to seeing these expressions in action 🙂 |
What
Tiny Engineer already has activity-driven eye modes, but applications cannot independently select and render a catalogue of expressive faces. This adds an optional C++ library with sixteen animated, kaomoji-inspired faces for a 128×32 monochrome OLED, plus a standalone demo that cycles through them every three seconds.
render(Expression, elapsedMs, buffer, bufferSize)writes one frame into a caller-owned 512-byte buffer compatible with Adafruit GFXdrawBitmap(). The caller owns timing, expression selection, display initialization, and orientation. Existing eye modes remain the default; this PR does not connect the new expressions to AI events, HTTP commands, or robot motion.The optional
expression-demobuild initializes only the OLED. Normal firmware builds and saved settings are unchanged.Checks
node scripts/expressions/generate.js --checkandnode scripts/expressions/test-assets.js: all 480 decoded frames match the original design baselines.pio test -e native: 21 tests passed, covering the renderer and existing settings/servo normalization tests.pio runandpio run -e expression-demo: both passed with Arduino-ESP32 3.3.11.HTTP routes, settings, pins, servo ranges, CAD, and PCB are unchanged, so the corresponding template checks are not applicable.
Hardware validation
Tested the exact example on a Waveshare ESP32-C3-Zero with a 128×32 I²C OLED using the SSD1306 driver at
0x3C. A localEXPRESSION_DEMO_ROTATION=2override matched the display's mounting orientation; the repository default remains 0.A 102.148-second serial capture recorded 35 expression states: every expression appeared at least twice in order, with transitions every 2.999–3.003 seconds. An on-site visual check confirmed correct orientation, expressions, and animation. Reset resumed autoplay, and the calibration NVS region was byte-identical before and after flashing.
Fixed-expression long-duration playback and physical power removal/reconnection were not tested on hardware; frame looping is covered by native tests. No photo/video recording is attached.
For the OLED-only bench test, keep the separate servo V+ rail switched off: the demo does not send PCA9685 commands and cannot clear output state retained by an already powered controller.
Summary by CodeRabbit
New Features
Documentation
Quality Improvements