wedsamuel1230/arduino-skills/non-blocking-patterns
Claude Code and agent skill by wedsamuel1230/arduino-skills
- community
Checking that the SKILL.md file is still in the repository.
Use when Arduino or embedded C++ code uses delay(), needs button debouncing, periodic work, cooperative scheduling, watchdog-safe timing, state machines, or latency/jitter control under sensor, network, or motor load.
Install
npx vskill@latest install wedsamuel1230/arduino-skills/non-blocking-patternsSKILL.md
Non-Blocking Patterns
Keep the main loop responsive and make timing behavior testable. Prefer C/C++ patterns that can be compiled for the exact board; use Python only for relevant test or log analysis tooling.
Intake
Record board/core version, task periods, deadlines, maximum work duration, input bounce, serial/network behavior, watchdog policy, interrupt constraints, and the safety response for missed deadlines.
Process
- List each periodic or event-driven task with period, deadline, and worst-case
work. Identify any blocking library call.
- Replace long
delay()calls with unsigned wrap-safe elapsed checks such as
if (static_cast<unsigned long>(now - last) >= period). Use hardware timers or RTOS tasks only when board and framework support is confirmed.
- Model multi-step work as an explicit state machine with bounded transitions;
do not hide waits inside a helper.
- Debounce inputs using a stable-state timer or event filter, not a blocking
pause. Bound serial parsing, network retries, and sensor conversion waits.
- Define watchdog feeding, output inhibit, timeout, and recovery behavior.
- Measure loop latency and task jitter under representative logging, radio,
storage, and actuator load.
Anti-rationalization
| Shortcut | Response | |
|---|---|---|
| "A shorter delay is fine." | It is still blocking; show the deadline and replace it. | |
| "The loop is fast on USB." | Measure with the actual radio, storage, and actuator load. | |
| "The enum makes it a state machine." | Require timed transitions, explicit entry/exit, and timeout behavior. | |
| "The watchdog can be fed everywhere." | Define ownership and fail-safe behavior; do not mask a stuck task. | |
"millis() never wraps." | Use unsigned subtraction and test the wrap boundary. |
Verification
- No unbounded blocking call remains in the time-critical path without a
documented reason and timeout.
- Debounce, wraparound, timeout, and missed-deadline cases have tests.
- Exact-target compile proof and timing/serial evidence are separate.
- Outputs enter a safe state when a task, sensor, or communication path times
out.
Shared output contract
Use the shared Arduino skill contract: state assumptions, required tools and versions, implementation steps, tests/evidence by proof stage, known limitations, and recovery/security notes.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/non-blocking-patterns/SKILL.md
Popularity
- Repository stars
- 22
- 7-day trend score
- 16
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/wedsamuel1230/arduino-skills/non-blocking-patterns)