Russ Nelson's blog

[ Home | RSS 2.0 | ATOM 1.0 ]

Mon, 09 Oct 2006

Obi-Wan the Cursor

I use four screens, and sometimes lose my cursor. No more! I have Obi-WanQui-Gon to point the way for me. Using the Makezine Controller, a small X program, OSC, and a pair of servo motors, I have a real-life cursor (2.4MB video).

The X program (included below) tracks the cursor, and ten times a second, sends an OSC (Open Sound Control) command using sendOSC to the controller. The commands work together like this:

~/src/servo | osc/sendOSC/sendOSC -h  192.168.0.200 10000

/* compile with this command:
cc servo.c -o servo -L/usr/X11R6/lib -lX11
*/
#include <stdio.h>
#include <X11/Xlib.h>

main(int argc, char *argv[])
{
    Display *dpy = XOpenDisplay(NULL);
    Window thiswindow;
    Window root, child;
    XEvent ev;
    int x, y, oldx, oldy;
    int junk;
    unsigned int state;

    thiswindow = DefaultRootWindow(dpy);
    for(;;) {
        XQueryPointer(dpy, thiswindow, &root, &child, &x,&y, &junk,&junk, &state);
        if (oldx != x || oldy != y) {
            printf("/servo/0/position %d\n/servo/1/position %d\n", x / 3, y * 1024 / 768);
            fflush(stdout);
            oldx = x;
            oldy = y;
        }
        usleep(1000L * 1000L / 10);
    }
}

Digg this!

posted at: 02:34 | path: /opensource | permanent link to this entry

Made with Pyblosxom