Files
anvil-bash/README.md
Eric Ratliff 991b9a8ee9 Arduino CLI build system with HAL-based test architecture
Build and upload tool (arduino-build.sh):
- Compile, upload, and monitor via arduino-cli
- Device discovery with USB ID identification (--devices)
- Persistent reconnecting serial monitor (--watch)
- Split compile/upload workflow (--verify, --upload-only)
- First-time setup wizard (--setup)
- Comprehensive --help with troubleshooting and RedBoard specs

Testable application architecture:
- Hardware abstraction layer (lib/hal/) decouples logic from Arduino API
- Google Mock HAL for unit tests (exact call verification)
- Simulated HAL for system tests (GPIO state, virtual clock, I2C devices)
- Example I2C temperature sensor simulator (TMP102)
- Host-side test suite via CMake + Google Test (21 tests)

Example sketch:
- blink/ -- LED blink with button-controlled speed, wired through HAL
2026-02-14 10:06:26 -06:00

2.0 KiB

SparkFun RedBoard Projects

Arduino sketches for SparkFun RedBoard, built and uploaded via arduino-build.sh.

Prerequisites

  • arduino-cli
  • Run ./arduino-build.sh --setup once after installing

Quick Start

./arduino-build.sh --devices           # find your board
./arduino-build.sh --monitor ./blink   # build, upload, serial console

Project Layout

sparkfun/
    arduino-build.sh        Build/upload/monitor tool (run --help)
    blink/
        blink.ino           LED blink + serial hello world

Two-Terminal Workflow

# Terminal 1: persistent serial monitor
./arduino-build.sh --watch

# Terminal 2: edit, build, upload (monitor reconnects automatically)
./arduino-build.sh ./blink

Adding a New Sketch

mkdir my_sketch
# Create my_sketch/my_sketch.ino (filename must match directory)
./arduino-build.sh --verify ./my_sketch   # compile check
./arduino-build.sh ./my_sketch            # build + upload

Troubleshooting

Ubuntu: Board not detected (CH340 / RedBoard)

On Ubuntu, brltty (a braille display daemon) may claim the CH340 USB-serial interface before the ch341 kernel driver can bind to it. The board will appear in lsusb but no /dev/ttyUSB* device is created.

Symptoms in dmesg:

usb 1-3.1.3: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0

If you are not using a braille display, remove brltty entirely:

sudo systemctl stop brltty-udev
sudo systemctl disable brltty-udev
sudo systemctl stop brltty
sudo systemctl disable brltty
sudo apt remove brltty

Alternatively, to keep brltty installed but block it from claiming CH340 devices, add a udev rule:

sudo tee /etc/udev/rules.d/99-ch340-no-brltty.rules << 'EOF'
SUBSYSTEM=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ENV{BRLTTY_BRAILLE_DRIVER}="none"
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger