//Mouse Control Script using IR //by vkapadia with much assistance from inio //vkapadia@vkapadia.com // //Calibration: //To calibrate, run this program and put the Wiimote on a flat surface face-up. //Then read the values in the debug line (next to the run button). //Change these values until the debug line reads approx. all zeros. var.xtrim = 6 var.ytrim = -31 var.ztrim = 6 // //Options: var.deadzone = 5 //distance in pixels that you have to move the wiimote in //order for it to register movement. Creates a "dead zone" around the pointer //to make it easier to click. Higher = smoother but less accurate. var.KITTspeed = 100 ms //delay speed for flashing LEDs. higher = slower var.rumble = false //makes the wiimote rumble if you hit the edge of the screen //more options to be added later //Controls: //Point Wiimote = Move Mouse //D-Pad = Arrow Keys //B-Button = Left Click //Home = Middle Click //A-Button = Right Click //Plus and Minus = Control Volume //One = Unmapped //Two = Unmapped // //If the pointer hits the edge of the screen, the Wiimote will rumble a bit. // //The LEDs attempt to emulate KITT's grill from Knight Rider //***Do not edit anything below this line unless you know what you are doing.*** //Set the D-Pad to function as the Arrow Keys if wiimote.Up Up = true else Up = false endif if wiimote.Down Down = true else Down = false endif if wiimote.Left Left = true else Left = false endif if wiimote.Right Right = true else Right = false endif //Mouse Buttons Mouse.RightButton = Wiimote.A Mouse.LeftButton = Wiimote.B Mouse.MiddleButton = Wiimote.Home //Plus and Minus handle Volume if wiimote.plus then volumeup = true wait 60 ms volumeup = false endif if wiimote.minus then volumedown = true wait 60 ms volumedown = false endif //wiimote.One //wiimote.Two //LEDs look somewhat like KITT's grill from Knight Rider if 0 = 0 then if var.kitt = 0 then wiimote.Leds = 1 endif if var.kitt = 1 then wiimote.Leds = 3 endif if var.kitt = 2 then wiimote.Leds = 6 endif if var.kitt = 3 then wiimote.Leds = 12 endif if var.kitt = 4 then wiimote.Leds = 8 endif if var.kitt = 5 then wiimote.Leds = 12 endif if var.kitt = 6 then wiimote.Leds = 6 endif if var.kitt = 7 then wiimote.Leds = 3 endif wait var.KITTspeed var.kitt = (var.kitt + 1) % 8 endif //If the mouse reaches the end, rumble for 200 milliseconds if var.rumble and (mouse.x = 0 or mouse.x = 1 or mouse.y = 0 or mouse.y = 1) then if var.rmbl = false wiimote.Rumble = 1 wait 200 ms wiimote.Rumble = 0 endif var.rmbl = true else var.rmbl = false endif var.accx = wiimote.RawForceX + var.xtrim var.accy = wiimote.RawForceY + var.ytrim var.accz = wiimote.RawForceZ + var.ztrim if wiimote.dot1vis and wiimote.dot2vis then if var.accy > -7 then var.orientation = 0 elseif var.accy > -45 then if var.accx < 0 then var.orientation = 3 else var.orientation = 1 endif else var.orientation = 2 endif if var.leftpoint = 0 then if var.orientation = 0 then if wiimote.dot1x < wiimote.dot2x then var.leftpoint = 1 else var.leftpoint = 2 endif endif if var.orientation = 1 then if wiimote.dot1y > wiimote.dot2y then var.leftpoint = 1 else var.leftpoint = 2 endif endif if var.orientation = 2 then if wiimote.dot1x > wiimote.dot2x then var.leftpoint = 1 else var.leftpoint = 2 endif endif if var.orientation = 3 then if wiimote.dot1y < wiimote.dot2y then var.leftpoint = 1 else var.leftpoint = 2 endif endif endif if var.leftpoint = 1 then var.fix1x = wiimote.dot1x var.fix1y = wiimote.dot1y var.fix2x = wiimote.dot2x var.fix2y = wiimote.dot2y else var.fix1x = wiimote.dot2x var.fix1y = wiimote.dot2y var.fix2x = wiimote.dot1x var.fix2y = wiimote.dot1y endif var.dx = var.fix2x - var.fix1x var.dy = var.fix2y - var.fix1y var.cx = (var.fix1x+var.fix2x)/1024.0 - 1 var.cy = (var.fix1y+var.fix2y)/1024.0 - .75 var.d = sqrt(var.dx*var.dx+var.dy*var.dy) var.dx = var.dx / var.d var.dy = var.dy / var.d var.ox = -var.dy*var.cy-var.dx*var.cx; var.oy = -var.dx*var.cy+var.dy*var.cx; var.ax = (var.ox * screen.desktopwidth) + (screen.desktopwidth / 2) var.ay = (-var.oy * screen.desktopwidth) + (screen.desktopheight / 2) var.dx = var.ax - mouse.cursorposx var.dy = var.ay - mouse.cursorposy var.d = sqrt((var.dx*var.dx)+(var.dy*var.dy)) var.a = 180 / (200 + var.d * var.d * var.d * .001) if var.d <= var.deadzone then var.a = 1 debug = var.d + " " + var.a var.finalx = mouse.cursorposx * var.a + var.ax * (1 - var.a) var.finaly = mouse.cursorposy * var.a + var.ay * (1 - var.a) mouse.cursorposx = var.finalx mouse.cursorposy = var.finaly else var.leftpoint = 0 endif //debug = var.accx + " " + var.accy + " " + var.accz