How a ventilator-dependent quadriplegic uses a computer with sip & puff
Morse code is a perfect method for a quadriplegic, someone with little or no ability to move. A person just needs to be able to activate a switch.
Many people with physical disabilities are not able to use a computer keyboard or mouse. This severely limits their access to the educational, recreational and career opportunities provided by computer technology. Morse code has long been recognized as an effective computer access method for people who are not able to use a keyboard or mouse.
Morse code systems use a binary input method that represents characters and commands as a series of dots and dashes. For example, a dot followed by a dash indicates the letter A, a dash followed by three dots represents B, etc. If a single switch is used, a dash is differentiated from a dot by holding the switch closed for a longer period of time. In two-switch Morse code, one switch enters dots while the other enters dashes. Three-switch input is also available for people who cannot reliably control their movements. Morse code is quite efficient — speeds of 15 to 30 words per minute are common, and speeds in excess of 60 words per minute can be attained.
Morse code has a number of advantages over other alternate computer access strategies. It is usually faster, requires less fine motor control, and is less likely to produce fatigue. Perhaps its most important advantage is its ability to become a sub-cognitive process. After using it for a period of time, the user no longer thinks about the codes they’re entering — the same process used by touch typists. Morse code is the only alternate access method that can become sub-cognitive.
I have used sip and puff to enter Morse codes to access computers since 1989 when I became a quadriplegic, paralyzed from the neck down and dependent on a ventilator to breathe. It is an easy-to-use method for someone with limited head movement and difficulty speaking.
I first used ezMorse in DOS on a PC. In 1994 I began using the AdapTek Interface Adap2U Adaptive Input Interface System. With the Adap2U I can enter every keyboard key, move the mouse, and click the mouse buttons. Since the Adap2U is a hardware interface it can be used with any operating system. The computer sees it as a keyboard and mouse.
I also use a Morse code input device called Tandem Master (aka Morse-2-USB controller). Using 2 switches (sip and puff or two head switches, for example) the user can input Morse codes for all keyboard keys, move the mouse (left, right, up, down), and click the mouse buttons. It is automatically recognized as USB HID keyboard and mouse by any modern computer with a USB port — no additional software or setup needed.
You can see how I use sip and puff Morse code in these videos:
The device has four groups. The active group determines which code table is used. Group 0 is always checked first, regardless of the active group — its 8-symbol patterns are available at all times.
A
These 8-symbol patterns work in any group and jump directly to the named group.
| Pattern | Symbols | Destination |
|---|---|---|
........ | 8 dots | Group 1 — Keyboard |
-------- | 8 dashes | Group 2 — Mouse / Shortcuts |
....---- | 4 dots then 4 dashes | Group 3 — Macros |
----.... | 4 dashes then 4 dots | Group 2 — Mouse / Shortcuts (alternate) |
Switching groups with a long sip/puff: holding for 2+ seconds cycles groups. Long sip cycles backward (3→2→1→3…); long puff cycles forward (1→2→3→1…).
The default group after power-on. Provides letters, numbers, punctuation, function keys, navigation keys, and modifier keys.
Two non-standard patterns free up codes for high-frequency control keys:
| Letter | Standard ITU | AeroMorse | Freed code used for |
|---|---|---|---|
| M | -- | ---- | -- → Backspace |
| C | -.-. | ---. | -.-. → Left Control |
| Letter | Pattern | Letter | Pattern |
|---|---|---|---|
| A | .- | N | -. |
| B | -... | O | --- |
| C | ---. (non-std) | P | .--. |
| D | -.. | Q | --.- |
| E | . | R | .-. |
| F | ..-. | S | ... |
| G | --. | T | - |
| H | .... | U | ..- |
| I | .. | V | ...- |
| J | .--- | W | .-- |
| K | -.- | X | -..- |
| L | .-.. | Y | -.-- |
| M | ---- (non-std) | Z | --.. |
| Number | Pattern | Number | Pattern |
|---|---|---|---|
| 1 | .---- | 6 | -.... |
| 2 | ..--- | 7 | --... |
| 3 | ...-- | 8 | ---.. |
| 4 | ....- | 9 | ----. |
| 5 | ..... | 0 | ----- |
| Character | Pattern | Character | Pattern |
|---|---|---|---|
+ plus | -...- | ! exclamation | .-.... |
- hyphen | .---. | @ at sign | ---..- |
= equals | ---.- | # hash | ..---. |
* asterisk | -..-- | $ dollar | ..---- |
. period | .----- | % percent | ...-.- |
, comma | -..... | ^ caret | -...-- |
: colon | .----. | & ampersand | .---.. |
; semicolon | -....- | ? question mark | -.---- |
) close paren | ...--- | / slash | ....-- |
( open paren | ---... | \ backslash | ----.. |
] close bracket | -..--- | | pipe | ....-. |
[ open bracket | .--... | _ underscore | ----.- |
} close brace | --..- | " double quote | ...--. |
{ open brace | ..--. | ' apostrophe | ..-... |
< less than | --..-- | ` backtick | --.--- |
> greater than | ..--.. | ~ tilde | ---.-- |
| Key | Pattern | Key | Pattern |
|---|---|---|---|
| F1 | --.---- | F7 | ----... |
| F2 | --..--- | F8 | -----.. |
| F3 | --...-- | F9 | ------. |
| F4 | --....- | F10 | ------- |
| F5 | --..... | F11 | .------ |
| F6 | ---.... | F12 | ..----- |
| Key | Pattern |
|---|---|
| Up Arrow | .-..- |
| Down Arrow | .--.. |
| Left Arrow | .-.-.. |
| Right Arrow | .-.-. |
| Home | ....... (7 dots) |
| End | ...-... |
| Page Up | .....- |
| Page Down | ...-.. |
| Enter | .-.- |
| Escape | --.... |
| Delete | -.--.. |
| Insert | -.-.. |
| Backspace | -- |
| Space | ..-- |
| Tab | ---..-. |
Modifier keys are sticky: press the pattern once to arm the modifier (shown on display). The next key fires with that modifier held, then it auto-releases. Press again while armed to disarm without firing.
| Modifier | Pattern |
|---|---|
| Left Control | -.-. |
| Left Shift | --...- |
| Left Alt | --.-- |
| Left GUI (Win/Cmd) | .--.-- |
| Caps Lock | -----. |
| Scroll Lock | --.-.. |
| Num Lock | ---...- |
| Print Screen | --.--. |
| Action | Pattern |
|---|---|
| Switch to Group 2 (Mouse) | ...-. |
Mouse movements follow the numeric keypad layout: directions map to the same positions as numpad 7–9, 4–6, 1–3. Each cardinal direction has a short pattern (2–3 symbols) and a large-step pattern (5 symbols).
| 🖱︎ Direction | Short pattern | Large pattern |
|---|---|---|
| ↑ Up | -- | ---.. |
| ↓ Down | --- | ..--- |
| ← Left | .. | ....- |
| → Right | ... | -.... |
| ↖ Up-Left | --... | — |
| ↗ Up-Right | ----. | — |
| ↙ Down-Left | .---- | — |
| ↘ Down-Right | ...-- | — |
| Scroll ↑ | .....- | — |
| Scroll ↓ | ...-.. | — |
Mouse speed modes: Normal (×2, default) • Slow (×1, toggle with --..) • Fast (×3, see morse_map.py). Pixels per step = raw direction value × speed × 2.
| Action | Pattern |
|---|---|
| Left click | .- |
| Right click | .-- |
| Double-click left | ..- |
| Double-click right | ..-- |
| Toggle left-button drag | -. |
| Action | Pattern |
|---|---|
| Toggle repeat | . |
| Toggle repeat (alternate) | ..-.. |
Repeat re-fires the last action continuously until toggled off. After a mouse move, the cursor glides smoothly. After a key or text, that action fires every 40 ms. Any new sip or puff while repeating immediately stops it.
| Action | Pattern | Effect |
|---|---|---|
| Mouse slow toggle | --.. | Toggle slow-step mouse speed |
| Mouse reset | -.-..-. | Release drag, stop repeat, restore normal speed |
| Pattern | Shortcut | Action |
|---|---|---|
..... | Alt + Tab | Switch windows |
----- | Win + Tab | Task View |
--.... | Ctrl + Alt + Left Arrow | Release mouse capture from VM |
Same patterns as Group 1 left-hand equivalents, but send right-hand modifier keycodes.
| Modifier | Pattern |
|---|---|
| Right Control | -.-. |
| Right Shift | --...- |
| Right Alt | --.-- |
| Right GUI | .--.-- |
| Action | Pattern |
|---|---|
| Switch to Group 1 (Keyboard) | ...-. |
Macro patterns mirror the Group 1 alphabet so the same muscle memory that types a letter also fires a macro phrase. Edit the entries in morse_map.py to set your own phrases. Some example entries are pre-filled:
| Pattern | Letter equivalent | Default macro |
|---|---|---|
.- | A | name |
-... | B | address |
---. | C | phone |
. | E | |
| all other letter patterns | D, F–Z | empty — fill in |
Numbers 0–9 and Enter / Backspace work the same as in Group 1.
The TandemMaster Morse-2-USB (M2U), designed and used by Tania Finlayson (Kirkland, WA), is a compact hardware device (3¼″ × 2¼″ × ¾″, 1.7 oz) that converts Morse code input into standard USB keyboard and mouse output. It connects via a single mini-USB cable — no external power or driver installation required — and appears to the host as a standard USB HID keyboard, mouse, and removable storage drive. Compatible with Windows XP or newer, Mac OS, and Android (via OTG cable).
Two adaptive switches connect via a 1/8″ (3.5 mm) stereo jack: one for dit, one for dah. An optional 1/8″ speaker jack provides audio feedback with software-controlled volume. Five menus organize Morse functions: Menu 0 (always-available base commands such as speed and volume), Menu 1 (keyboard, default), Menu 2 (mouse movement and clicks), and Menus 3–4 (user-definable). Built-in word prediction draws from a vocabulary of up to 1,820 words (800 built-in plus up to 1,020 user-added), and pre-defined macros for common phrases are stored in ROM. All code patterns, timing, tones, macros, and vocabulary are fully customizable via an editable MCONFIG.INI text file stored on the device’s onboard SD memory chip.
The AirTalker, an open-source project by ATMakers, is a sip/puff Morse code to keyboard/mouse interface inspired by the discontinued Adap2U. It runs on CircuitPython on a supported microcontroller (such as an Adafruit ItsyBitsy M4). A pressure sensor detects sip and puff inputs, translates Morse code patterns into USB HID keyboard and mouse output, and appears as a standard USB device — no drivers required. All hardware designs, firmware, and a 3D-printable enclosure are freely available.
AeroMorse is an open-source CircuitPython project directed by Jim Lubin — a ventilator-dependent quadriplegic who has used Morse code for computer access since 1989. Inspired by AirTalker, it turns an Adafruit Feather microcontroller into a USB HID keyboard and mouse that connects via USB-C and appears to the host as a standard keyboard and mouse with no drivers required. Works on Windows, macOS, Linux, iPadOS, Android, and ChromeOS.
Jim is the user, project lead, and source of all design decisions: hardware choices, input-mode requirements, Morse code-set conventions, accessibility trade-offs, and ongoing user feedback (his own and from other AAC users — Darci USB veterans in particular). The firmware (code.py), the build guide, and the comparison documents were written by Claude Opus 4.7 (Anthropic) acting as the coding assistant — a “vibe coding” workflow in which Jim directs and Claude writes. Jim does not write the firmware himself, and has not personally soldered or assembled every hardware combination listed here. Several options — particularly some board / display / speaker combinations — are documented from datasheets and Claude’s understanding of the parts rather than from a verified build.
morAce, by AceCentre (UK), is open-source firmware for Bluetooth-enabled microcontrollers that converts switch presses into Morse code and sends the resulting keystrokes and mouse movements wirelessly to any BLE (Bluetooth Low Energy) compatible device — phones, tablets, or computers. No USB cable or drivers required on the receiving device.
Google’s Gboard keyboard includes a built-in Morse code input method for Android and iOS. On Android it is accessible through Accessibility settings; on iOS it is available in the Gboard app. Users enter dots and dashes via two on-screen buttons or hardware switches (via Switch Access on Android), and the keyboard translates the patterns to text. A Circuit Playground Express can also serve as a hardware Morse switch interface for Gboard.
These devices may still be available or in use:
The Adap2U, by AdapTek Interface (Kirkland, WA), is a hardware keyboard and mouse emulator for IBM PC/AT compatible computers. It plugs into the keyboard port and is completely transparent to the computer — no special software or TSRs required; any standard software works as-is. An optional serial port connection adds mouse emulation.
Input is through up to three switch jacks plus a variety of pointing devices (serial mouse, head pointer, joystick, touch screen, trackball). Input methods include user-defined Morse code (up to 3 switches), on-screen scanning (1–3 switches), and serial input devices. The unit has its own dedicated Hercules-compatible monochrome monitor that displays fully customizable “Menus” of keys without interfering with the main screen. Key layouts, timing, and all switch functions are configured using the included AUEdit software and can be changed at any time.
The Darci Too, by WesTest Engineering Corporation, is a hardware interface that connects via serial port (RS-232) and allows full keyboard and mouse access using adaptive switches. It uses a Morse-based code system and supports single or dual switch input, including sip/puff, chin, and other switch types. As a hardware device it works transparently with all software.
The Darci USB, by WesTest Engineering Corporation, is a hardware interface that connects via USB port and provides full keyboard and mouse access using adaptive switches. Up to three switches can be connected via 3.5 mm (1/8″) jacks, supporting sip/puff, chin, tongue, eye blink, and other switch types. Input uses the Morse/Plus code system, a modified Morse code that covers all keyboard keys and mouse commands. A setup program configures switch timing, repeat behavior, audio feedback, and custom code sets (CodeMaker). Compatible with Windows 98, ME, 2000, and XP.
The Jouse family, by Compusult Limited (Mount Pearl, Newfoundland, Canada), is a series of mouth-operated joystick devices that act as a computer mouse for people with disabilities. A mouthpiece and sip/puff tube are mounted on an adjustable swing-away arm clamped to the desk. Tilting the mouthpiece moves the cursor; a puff is a left click, a sip is a right click, and a double puff is a double click.
Jouse (2002) — The original model connects via a serial port and includes a separate battery-powered control unit. A bite bubble on the mouthpiece toggles between Mouse mode and Morse mode; in Morse mode, sip and puff enter dots and dashes through third-party Morse software. Cursor speed is adjusted with a knob on the control unit.
Jouse2 (2008) — Upgraded to USB, eliminating the need for external power, drivers, or serial port. Built-in Morse code text entry added (supporting Morse 2000, Darci USB, EZKeys, EZ Morse, and JoyWrite code sets), with two-tone audio feedback and a volume control. Added a dwell cursor option (0.25–3 seconds, 8 stages), adjustable sip/puff sensitivity, sip/puff repeat (one long sip/puff = multiple inputs), and two 1/8″ switch jacks for alternative input. Self-calibrating center position at start-up. Compatible with Windows, macOS, and Linux.
Jouse3 (2017) — Expanded beyond computers to support tablets and other USB devices, including iOS (Switch Control mode), Android, Linux, Unix, macOS, and Windows. Added external switch control connectors for operating external switch-enabled devices. Optional wheelchair mounting via Super Clamp. Variable-friction arm and updated desk mount replaced the earlier clamp. Dwell cursor simplified to four stages (1–2.5 seconds). Built-in Morse code text entry was removed in this generation.
Morse code is one of the most efficient alternative computer access methods. EzMorse is based on a modified military Morse code system where dots and dashes are combined to form codes representing all the characters on the keyboard. EzMorse is most effectively used with a dual switch where one switch enters a dot and the other, a dash. No previous knowledge of Morse code is necessary to start using ezMorse: the user learns as they go. It takes the average user about four hours to memorize the codes for the alphabet. Typing speeds of up to 35 words per minute are not uncommon for Morse code users.
Modern Morse Code in Rehabilitation and Education:
New Applications in Assistive Technology
by Thomas W. King (Paperback)
Tip: Cheap puff tubes!
I use disposable “puff tubes” for my sip and puff wheelchair and adaptive keyboard/mouse system. After some research I found that what accessablity sites call “puff tubes” are what dentists call Saliva ejectors.
Papers available online — all focused on Morse code as a computer access method for people with disabilities.
Adaptive switches are devices that allow individuals with physical or cognitive disabilities to control technology and perform daily tasks. They serve as alternatives to traditional input methods like keyboards and touchscreens, providing various activation options tailored to the user’s abilities. To ensure broad compatibility with computers, communication devices, and other equipment, these switches use industry-standard 3.5 mm (1/8″) stereo and mono plugs.
Hand, Finger, and Body Switches — These switches respond to slight movements, such as pressing a button or squeezing. They are ideal for users with limited mobility, allowing them to activate devices with minimal effort.
Sip-and-Puff Switches — Activated by inhaling or exhaling into a straw-like device, making them particularly beneficial for users with very limited mobility. By sipping (inhaling) or puffing (exhaling) through a mouthpiece, users can activate switches that control computers, gaming systems, wheelchairs, and communication devices.
Subtle Movement and Sound-Activated Switches — Activated by small movements or sounds, making them suitable for users with severe physical limitations. They can be mounted close to the user or worn, allowing for easy access.
Proximity Switches — Activate when a user is within a certain distance, such as waving a hand near the device. They are useful for individuals who may not have the strength to press a button.
USB Human Interface Device (HID) — a standard that lets devices like keyboards, mice, and switches communicate directly with any operating system without installing drivers. Works with Windows, macOS, iPadOS, iOS, Android, ChromeOS, and Linux.