Adaptive Input

My girlfriend works with lots of special needs children. Amongst them is a particular student that has some significant challenges communicating. He can’t speak, or effectively control his arms or hands. In fact, the only things he can move with reliability and accuracy are his feet.

His teacher had a pair of accessibility buttons that she could connect to a computer. The software she had would allow him to choose one item for each button. While this was a good start (as he could finally make a choice), with only two buttons, he was very limited in the number of things he could choose.


I was worried about dealing with custom hardware or special drivers. Thankfully, those hardware buttons are hooked up via a Don Johnston Switch Interface Pro, which the computer sees as a keyboard. This made the software side VERY easy. In fact, you can select which keys the buttons emulate.


So, I wrote some software based on the concept of a Binary Search, so he could quickly and efficiently use the buttons to search through a collection of items. It’s rough. It can use some improvement… But it works, and it’s robust enough to be a decent proof of concept.

The program looks through the My Documents\AdaptiveInput\Lessons folder for sub-folders. Each sub-folder shows up as an option on the main menu as a “lesson” (I wasn’t sure what else to call them). You can also just click the “Open Lesson Folder” to directly go to where the lessons are stored.


Select a lesson and click “Go” to begin that lesson. This is the “Drinks” lesson, where the answer can be Apple Juice, Orange Juice, Milk, or Water. In this case, the student has two buttons: One green, one yellow.screenshot2.jpg

(Image cropped from my ginormous monitor)

If the student wants to select orange juice, they click the yellow button. The screen changes to this:


Then, the student would click the green button to select the orange juice. The screen changes to show the final selection.


There are lots of places to go from here. Accepting more buttons is a fairly trivial enhancement. Different types of input (Click, double-click, click & hold, and multi-button clicks for people who can perform those kinds of input). Having some kind of back mechanism (Perhaps click & hold) would also make sense.

YouTube Demo:

GPL program on GitHub here: Source Code


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s