For props built around an Arduino Uno, Mega, or any board that opens a USB CDC serial port and prints text on press, XOSC's serial mode is the right fit.
How XOSC parses serial
By default, XOSC opens the port with a line parser: incoming bytes are buffered, split on \n, and each non-empty line becomes a trigger. The signature is serial:<port>:<trimmed-line>, so two different lines on the same port are two different bindings.
If your firmware emits raw bytes without delimiters — e.g. binary frames — flip the Raw bytes toggle in the serial bind UI. In raw mode every chunk that arrives from the port becomes its own trigger, no line-splitting.
For non-default delimiters, the Delimiter field accepts the escape syntax (\n, \r\n, \r, \t) and decodes it when opening the port — paste the escape verbatim, not the control character.
Choosing a port
The inspector lists every COM port the OS reports. If your board doesn't show up, check Device Manager → Ports (COM & LPT) — most Arduino boards need the CH340 or FTDI driver installed. Once it shows there, click Refresh in XOSC.
Baud rate
Match whatever your firmware's Serial.begin() uses. The default in our list is 9600, but most modern boards run 115200 — check your sketch. A mismatched baud rate produces gibberish on the wire and you'll see scrambled "lines" in the debug log.
Example Arduino sketch
const int BUTTON_PIN = 2;
int lastState = HIGH;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
int s = digitalRead(BUTTON_PIN);
if (s != lastState) {
lastState = s;
if (s == LOW) Serial.println("BTN1_DOWN");
else Serial.println("BTN1_UP");
}
delay(5);
}
In XOSC: switch to Serial capture, open the port at 115200, click Bind next press, then press the button. The line BTN1_DOWN becomes the binding. Press again and OSC fires.