Real-time Morse code decoder with beautiful GUI
โ Works on Linux, Windows, and macOS
- Beautiful GUI with adjustable WPM (5-40) and frequency (300-1000 Hz)
- Real-time decoding of paddle inputs via MIDI
- Audio feedback with adjustable tone
- Visual indicators showing paddle status
- Cross-platform - runs on Linux, Windows, and macOS
- Full Morse code support - all letters, numbers, and punctuation
Debian Linux / Linux Mint
/etc/udev/rules.d/49-digispark.rules
# Digispark ATtiny85
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
# Digispark ATtiny167
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
See: BUILD_LINUX.md
See: BUILD_WINDOWS.md
See: BUILD_MACOS.md
- ATtiny85 Digispark board
- Iambic paddle or straight key
- USB cable
ATtiny85 Pin 2 (P2) โ LEFT paddle (Dit)
ATtiny85 Pin 0 (P0) โ RIGHT paddle (Dah)
ATtiny85 GND โ Paddle common ground
- Install Arduino IDE (available for all platforms)
- Add Digispark board support:
- File โ Preferences โ Additional Board Manager URLs
- Add:
[http://digistump.com/package_digistump_index.json](https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json)
- Tools โ Board โ Board Manager โ Install "Digistump AVR Boards"
- Install DigiMIDI library (Sketch โ Include Library โ Manage Libraries) https://github.com/heartscrytech/DigisparkMIDI
- Open
paddle_decoder.ino - Tools โ Board โ Digispark (Default - 16.5mhz)
- Sketch โ Upload (plug in Digispark when prompted)
-
Install Rust (if not installed):
# Visit https://rustup.rs and follow instructions for your platform -
Install platform-specific dependencies (see platform guides above)
-
Build the application:
cd paddle_decoder_cross_platform cargo build --release -
Run it:
cargo run --release
- Drag WPM slider - Adjust speed (5-40 WPM)
- Drag Frequency slider - Change tone (300-1000 Hz)
- Click "Add Space" - Insert space in decoded text
- Click "Clear Text" - Reset decoded text
- ๐ด RED - Paddle currently pressed
- โช GRAY - Paddle released
- ๐ต BLUE - Current sequence (dots/dashes)
- ๐ข GREEN - Decoded text
At 20 WPM:
- Dit: 60ms
- Dah: 180ms (3ร dit)
- Letter gap: 300ms (5ร dit) - triggers character decode
- Word gap: 420ms (7ร dit)
The decoder waits 300ms after your last paddle press to decode the character. This gives you comfortable timing between elements!
No MIDI device found:
- Check Digispark is plugged in
- Verify LED blinks 5 times on startup
- Check if
paddle_decoder.inois uploaded
No sound:
- Check system volume
- Test with other audio applications
- Verify audio output device is selected
Characters decoding wrong:
- Timing issue - try adjusting WPM slider
- Make sure to pause 300ms between letters
See platform-specific build guides:
- Linux: BUILD_LINUX.md
- Windows: BUILD_WINDOWS.md
- macOS: BUILD_MACOS.md
A .- J .--- S ...
B -... K -.- T -
C -.-. L .-.. U ..-
D -.. M -- V ...-
E . N -. W .--
F ..-. O --- X -..-
G --. P .--. Y -.--
H .... Q --.- Z --..
I .. R .-.
0 ----- 5 .....
1 .---- 6 -....
2 ..--- 7 --...
3 ...-- 8 ---..
4 ....- 9 ----.
. .-.-.- ? ..--..
, --..-- ! -.-.--
/ -..-. @ .--.-.
<BK> -..-.- Break (pause in transmission)
<AR> .-.-. End of message
<BT> -...- Break text / new paragraph (same as "=")
<SK> ...-.- End of contact / Silent Key
Note: Prosigns are sent without gaps between the elements (as one continuous sequence).
Note: <BT> and = share the same Morse pattern (-...-), so the decoder shows = for this pattern.
- Start slow - Begin at 15 WPM and work your way up
- Consistent timing - Try to maintain steady rhythm
- Clear pauses - Wait full 300ms between letters
- Watch indicators - Visual feedback helps build muscle memory
- Practice common letters - Start with E, T, I, A, N, M
paddle_decoder_cross_platform/
โโโ Cargo.toml # Rust project configuration
โโโ paddle_decoder.ino # ATtiny85 firmware
โโโ src/
โ โโโ main.rs # Main application
โโโ README.md # This file
โโโ BUILD_LINUX.md # Linux build guide
โโโ BUILD_WINDOWS.md # Windows build guide
โโโ BUILD_MACOS.md # macOS build guide
This is an open-source project for the amateur radio community. Feel free to:
- Report bugs
- Suggest features
- Submit pull requests
- Share your improvements
Free for amateur radio and educational use.
Having issues?
- Check the platform-specific build guide
- Review troubleshooting section above
- Verify hardware connections
- Test with provided diagnostics
Happy decoding!
Built with โค๏ธ for the amateur radio community

