I couldn't possibly be the first poster in this forum, could I? I guess this forum is new. Lets start with something simple:
The "switchboard" or "footboard" is explained on my website, but I'll sum it up here:
This board is intended for my feet. The Arduino tells my software when a button is pressed or released. The board (a three-ringed binder with switches) serves as a resting place for my feet, as well as a secondary input method into the computer. So far, my software has modes to allow these buttons to control winamp, perform clipboard operations (copy/paste), and serve as shortcuts for things I use often (such as a prefix for URLs of pictures on my site).
With software, any combination of functions can be made to do all sorts of things. For me, these added buttons allow me to do things faster than I can normally, or even allow me to do things I couldn't do before. Before, it was impossible for this amputee to effectively play FPS games. With this invention, I can use my feet to move around, leaving my only hand free to do the mouse thing.
I think this last part was worth mentioning, as in a way the Arduino is improving my quality of life. I'm sure the creators of the Arduino didn't imagine seeing it being used for the disabled. I'm very grateful that there is such a thing! Thanks to everyone who helped make Processing/Wiring/Arduino a reality :)
I once joked to a friend about having foot pedals for my computer, but now someone actually goes and does it! That is a very clever use for Arduino. I looked at your web page and saw the Arduino code, but I was wondering how exactly you did things on the O/S side… (Windows? Linux? other?) If Windows, do you have to find which window has focus and inject keyboard messages into its particular message dispatch loop?
I once wrote a program that would take over the mouse and send pretend mouse clicks to solve Minesweeper. (I called my program “Minebroom”.) It would even grab pixels to figure out what the numbers were on the screen. But I never had to do anything with the keyboard, so I am curious about the programming details.
Thanks for sharing…
I used VB6 to interface. There is a command called "SendKeys". For example, sending a "paste" command is as simple as:
Where "^" means ctrl. Of course, this method doesn't work if a program is using non-standard methods of grabbing input. There are many ways to grab input from the keyboard. Video games, for example, probably use one of the API calls that allows the game to detect when a key is pressed or let go; holding a key will not cause it to repeat the character.
In this case, windows has an accessibility feature called "serialkeys". So, in quake2 for example, I have each of the four buttons assigned to a, s, d, and w. When the leftmost button is pressed, it is like pressing the "a" key and releasing it. When that same button is released, another "a" is sent. In-game:
alias a1 "+moveleft ; bind a a2"
alias a2 "-moveleft ; bind a a1"
So that, in effect, these buttons properly control said FPS externally.
Long time ago I thought it would be great to have foot controlled trackball. So, something like a bowling ball with a three big buttons. That way you can mouse with one foot and have two hand always on the keyboard. I don't know if you can FPS with foot controlled trackball, in that case your only hand could be on the keyboard fultime.
At some point I got used to switching between mouse and keyboard and more or less forget about the idea. Today I use a spaceball, seperate numeric keyboard and wacom tablet. An extra mouse might be nice though. (BTW, I am an engineer and almost fultime working with CAD software, so very mouse and numeric oriented)
The foot trackball sounds cool and is kind of related to the search that brought me to this thread. I’m currently developing some alternative input devices, for artistic purposes mainly but also with the possibility of them moving more into a therapeutic context. They involve using the knee and elbow joints to control cursor position. I’ve got a basic prototype working by doing an analogue read on two variable resistors then using the arduino to interface with a basic drawing program in processing. the problem is it only works in the window that processing creates.
http://webzone.k3.mah.se/projects/arduino-workshop/projects/arduino_meets_processing/instructions/joystick.html the info on my setup thus far
If you were to use the arduino for the foot trackball idea you would need to send data out of the arduino and have that data recognised as mouse data by your PC. this is also what i’d like to do, that way my multi-limb input devices can function as mouse and not just a processing exercise. perhaps serial mouse data is the place to start
any suggestions are most welcome
I'm not sure this can work for mousing but win XP has an accessibility feature which allows the use of a serial device as a keyboard.
It is possible for software to set the mouse position. Some programs do this (dragon naturally speaking comes to mind). Of course, as the arduino works serially, I suppose you could emulate a mouse' language to the PC.
thanks for your replies
my current thoughts are drifting away from using the arduino board but i thought i'd post them here as a follow up. i'm thinking about hacking a joystick (one that has potentiometers in it, mouse=no potentiometers=more difficult for me to hack), then using joystick to mouse
or something like it to get my mouse functionality.
once again thanks
Hi - I really enjoyed reading about this project. I want to make something similar to emulate a Microwiter - you know? The old one handed typing (hur hur) interface? Similar to the cykey.
However, I have hit a few snags, some of which your writeup solves... I wonder if I could get help with the outstanding issues?
I want to have five pushbuttons - one under each finger of my right hand. I have followed ladyada's tutorial, and have one pushbutton sending a phrase via the serial key, but noted that it is too easy to repeat ... So I figured that I needed some sort of loop to wait for a key press and then another loop to read which combo of keys had been pressed, then to output the resultant character to the serial port.
Is this how yours works? I have yet to get to grips with the subtlety of your code!
Secondly, I found serial keys and was happy to note it would give me a way to hand over my input to a windows program. However, I only seem to have com ports 1 to 4 listed! My USB Arduino is on USB Com port 40!! Is there a way to fix this?
Thirdly, according to Ladyada's fantastic instructions, you need a pull-down for each switch, yet you state that the mega8 has these built in? My Arduino is based on the 16... Same applies?
The idea would be that eventually I could get a Bluetooth module for the arduino, box it up with the keys and have a portable one-handed keyboard for use with my PDA, phone etc.
Thanks again for your help!