Files
apress/deploy/uno-q/skills/led-matrix/SKILL.md
T
Omar SobhandClaude Opus 4.8 62c435c648 feat(uno-q): bundle the granular skill set alongside arduino-uno-q on every node
Vendors the fork's 11 granular UNO Q skills (bridge, flashing, led-matrix,
uno-q-hardware, sketch-patterns, modulino, linux-led, audio, vision, wireless,
arduino-app-lab) next to the comprehensive arduino-uno-q skill, and installs the
whole set into every agent's workspace on each board.

Why both: the comprehensive skill is the rich cloud reference (read_skill →
references); the granular skills are keyword-triggered and match the fork's eager
skill-inliner rules, so the on-board Qwen auto-inlines them (no read_skill
round-trip). flashing + led-matrix carry the exact uno_q_flash + frame-API /
ArduinoGraphics-not-installed detail that makes flashing reliable.

- push-skill.sh generalized: a single skill dir (has SKILL.md) OR a parent dir
  installs every skill under it; provision-fleet now ships all of skills/.
- Verified on board 65301572: cloud/Sonnet-5 lists all 12 skills.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-16 09:32:11 -07:00

90 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: led-matrix
description: Drive the Arduino Uno Q's built-in 13x8 blue LED matrix — draw frames with the always-bundled Arduino_LED_Matrix frame API, or scroll text with ArduinoGraphics when it's installed. Load this whenever the user mentions the LED matrix, drawing pixels, or displaying words on the board.
---
# Uno Q Built-in LED Matrix
The Uno Q has a built-in **13 columns × 8 rows** (104-pixel) **blue** LED matrix,
driven by the STM32U585 MCU. (It is NOT an LCD, and NOT red.)
## Prefer the frame API (always available)
`Arduino_LED_Matrix` is bundled with the `arduino:zephyr` core — **no lib install**.
The **frame API** works on every core version and is the safe default. A frame is
**four `uint32_t` words** (128 bits; the first 104 map to the pixels). `loadFrame`
displays one:
```cpp
#include "Arduino_LED_Matrix.h"
Arduino_LED_Matrix matrix;
const uint32_t FULL[4] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}; // all on
const uint32_t BLANK[4] = {0, 0, 0, 0}; // all off
void setup() {
matrix.begin(); // REQUIRED — without it the matrix stays dark
}
void loop() {
matrix.loadFrame(FULL);
delay(500);
matrix.loadFrame(BLANK);
delay(500);
}
```
- `matrix.loadFrame(const uint32_t[4])` — show a raw frame.
- `matrix.renderBitmap(bitmap, rows, cols)` — show an 8×13 `uint8_t` bitmap (1 = on).
- The matrix is **charlieplexed**: the MCU must keep running to refresh it. If the
sketch halts or stops driving it, the display freezes/goes dark — a *static*
pattern that never changes usually means the sketch isn't running (see `flashing`).
## Scrolling text (needs `ArduinoGraphics` — install it first)
Text scrolling needs `ArduinoGraphics`. On core 0.51.0 the matrix lib includes it
**conditionally** (`__has_include`), so it is NOT present by default — a scroll
sketch fails with `'endText'/'SCROLL_LEFT' not declared`. Install it once (needs
network), then it stays available offline:
```
arduino-cli lib install ArduinoGraphics # run with TMPDIR=/tmp on the Uno Q
```
Verified working sketch on core 0.51.0 with ArduinoGraphics@1.1.5 (compiles to ~7.6 KB):
```cpp
#include "ArduinoGraphics.h" // MUST come before Arduino_LED_Matrix.h (defines SCROLL_LEFT)
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix; // ArduinoLEDMatrix and Arduino_LED_Matrix are aliases
void setup() {
matrix.begin();
matrix.textFont(Font_5x7); // fits the 8-row height
matrix.textScrollSpeed(80); // ms per step; lower = faster
}
void loop() {
matrix.beginText(0, 1, 0xFF, 0xFF, 0xFF); // x, y, R, G, B — the 5-arg form
matrix.print(" HELLO UNO Q "); // pad with spaces so it scrolls in and out
matrix.endText(SCROLL_LEFT);
delay(200);
}
```
If installing a library isn't an option (fully offline, no network ever), scroll a
hand-rendered font with the frame API instead: build an 8×N `uint8_t` bitmap of the
message and `renderBitmap(window, 8, 13)` a sliding 13-column window each step.
## Pitfalls
- **`ArduinoGraphics` may be absent** (core 0.51.0) — prefer the frame API; only use
the text API when the sketch is known to compile against a core that bundles it.
- Always call `matrix.begin()` in `setup()`, or the matrix stays dark.
- Include order for the text path: `ArduinoGraphics.h` **before** `Arduino_LED_Matrix.h`.
- Use the **5-argument** `beginText(x, y, R, G, B)` form; the 3-arg form is a
training-data artifact.
- It's a monochrome **blue** matrix — RGB args only set on/off, not hue.