draft: false Name: Dot Dash short-description: Type on a USB keyboard, and the card sends it as Morse code Language: C++ (Pico SDK + ComputerCard) Creator: Joep Vermaat Version: "1.3" Status: Beta License: MIT date-created: 2026-10-08 date-updated: 2026-10-08 contact: email: joep@joep-i.nl demo-link: https://www.youtube.com/watch?v=37OTUfdDDbk tags: - usb-host - utility - cv - audio summary: | Dot Dash turns a USB keyboard into a Morse code transmitter. Plug a keyboard into the Workshop Computer, type letters, and each character is sent as dots and dashes: a square beep on **Audio Out 1**, a triangle melody voice on **Audio Out 2**, a gate on **Pulse Out 1**, a per-symbol trigger on **Pulse Out 2**, and a pitch on **CV Out 1**. Every letter and digit has its own note, rising with the alphabet (A is the lowest), so a typed word becomes a melody. All outputs play together on their separate jacks. Knob X sets the speed (5-40 words per minute), Knob Y the beep pitch, and Knob Main the master audio volume. **CV In 1** transposes the notes (1 V/oct, +/-2 octaves), **CV In 2** modulates the speed, **Pulse In 1** is an external clock (one edge per Morse unit, overriding Knob X while running), and **Pulse In 2** clears anything typed but not yet sent. When no keyboard is connected the card loops **SOS** on the audio, CV and gate outputs and flashes all six LEDs in that rhythm. panel: inputs: - id: CVIn1 name: Transpose description: 1 V/oct transpose for the dot/dash notes, clamped to +/-2 octaves - id: CVIn2 name: Speed Mod description: Adds up to +/-20 WPM on top of Knob X; final speed clamped to 5-60 WPM - id: PulseIn1 name: External Clock description: One rising edge per Morse unit (dot = 1, dash = 3, gaps 1/3/4). Overrides Knob X while the clock is running; reverts to the knob after ~2 s without an edge - id: PulseIn2 name: Clear description: A rising edge discards the typed queue and returns to idle outputs: - id: AudioOut1 name: Morse Beep description: Square-wave beep for each dot and dash, level set by Knob Main - id: AudioOut2 name: Melody Voice description: Triangle wave at the character's pitch (follows the same note as CV Out 1), level set by Knob Main - id: CVOut1 name: Character Pitch description: One note per character, rising with the alphabet (A is lowest); dot and dash share it. Holds through letter gaps and drops to 0 V at word gaps or when idle. Calibrated when available, tracks the Transpose input - id: CVOut2 name: Speed CV description: The current speed as a voltage, 0 V at 5 WPM to +5 V at 60 WPM; derived from the external clock when one is driving the card - id: PulseOut1 name: Key Gate description: High for exactly the length of each dot or dash, low during the gaps - id: PulseOut2 name: Symbol Trigger description: A short ~2 ms trigger fired at the start of each dot or dash controls: switch: middle: name: Unused description: The switch does not change behaviour - all outputs play together on their separate jacks knobs: - main: name: Volume description: Master level for the beep and melody audio outputs (fully down is silent; the CV outputs are unaffected) x: name: Speed description: Transmission speed, 5-40 words per minute (before CV In 2 modulation) y: name: Pitch description: Beep tone frequency, 300-2000 Hz leds: - display: list items: - id: LED0 name: Dot description: Lit while a dot is being sent - id: LED1 name: Dash description: Lit while a dash is being sent - id: LED2 name: Transmitting description: Lit while any symbol is being sent - id: LED3 name: Queue Full description: Flashes when you type faster than the queue can hold - id: LED4 name: Clocked description: Lit while an external clock on Pulse In 1 is driving the card - id: LED5 name: Keyboard description: Lit while a USB keyboard is connected host: usb: - name: USB Keyboard role: host-controller description: Any standard USB HID keyboard; type letters, digits, space and punctuation to transmit Morse