Skip to content

Using your Wiimote with powerpoint

With a number of presentations coming up, I wanted the ability to remotely trigger my presentation slides. A quick search on eBay revealed similar remote devices at varying prices, mostly from overseas. I ordered one, but while waiting for it to show up, hubby suggested that I look into using the Wiimote as “it’s just so much cooler”.

We tried a few things…and found a solution that works.

Here’s what you’ll need to get your Wiimote to work with Powerpoint in Windows Vista:

  • A Wiimote
  • GlovePIE version .22 or higher
  • A Bluetooth enabled PC – the standard Microsoft Windows Bluetooth stack isn’t completely compatible with the Wiimote. I ended up downloading and using BlueSoleil.
  • DirectX 8.0 or higher

Once you install GlovePIE, you’ll need to set up a GLovePIE script to enable the Wiimote to function in Powerpoint. Here’s the script I’m using at the moment (just save it as a .PIE file somewhere easily accessible). As you can see, it’s really basic. I haven’t had time to play around, but there’s a lot more cool stuff you can do!

Mouse.LeftButton = Wiimote.A
Mouse.RightButton = Wiimote.B
PageUp = Wiimote.Minus
PageDown = Wiimote.Plus
up = Wiimote.Up
down = Wiimote.Down
left = Wiimote.Left
right = Wiimote.Right

At present, the Wiimote mimics the page up and page down function and up/down/left/right arrow keys.

If you want more information, check out:

Published inGadgets

8 Comments

  1. Heh. A friend of mine wrote his own driver for the Wiimote, and plays quake with it.

  2. Ruth Ellison Ruth Ellison

    @Philip – that’s cool! I wonder if he’s finding it easier to use than the standard mouse/keyboard controls.

  3. And here I went and bought a new Targus wireless presenter with voice recording capability and laser pointer when I could have just used my cool Wii remote instead!

    *boggle*

    M :)

  4. […] Update 18 April 2008: You may find that your bluetooth device does not work very well. If that’s the case, download the Bluetooth Monitor for Windows Vista. You may also want to download the BlueSoleil bluetooth stack, especially if you are going to use your wiimote with powerpoint. […]

  5. Josh Josh

    What is the Wii motes pair code? I am having trouble pairing it with my machine.

  6. Madster Madster

    It has no pair code, you shouldn’t need to pair it.

  7. //——————————————————————————-
    // WiiMouseDpad.PIE
    //
    // Developer: Winko Erades van den Berg
    // E-mail : winko@winko-erades.nl
    // Developed: 11 February 2010
    // Modified: 11 February 2010
    // Version: 1.0
    //
    // Description: Use the WiiMote as a mouse and navigate through Dpad
    // : Home is presentation mode, + is PageDown, – is PageUp
    // : Button A and Home is exiting presentation mode
    //——————————————————————————-

    mouse.DirectInputX = mouse.DirectInputX – 15*deadzone(wiimote.Left)
    mouse.DirectInputX = mouse.DirectInputX + 15*deadzone(wiimote.Right)
    mouse.DirectInputY = mouse.DirectInputY + 15*deadzone(wiimote.Down)
    mouse.DirectInputY = mouse.DirectInputY – 15*deadzone(wiimote.up)
    Mouse.LeftButton = Wiimote.A and not Wiimote.B
    Mouse.RightButton = Wiimote.B and not Wiimote.A
    Keyboard.Up = Wiimote.Minus and not Wiimote.Home
    Keyboard.F5 = Wiimote.Home and not (Wiimote.Minus or Wiimote.Plus)
    Keyboard.Esc = Wiimote.Home and Wiimote.A
    Keyboard.Down = Wiimote.Plus and not Wiimote.Home

  8. Richard Bartlett Richard Bartlett

    Acknowledging lednerg’s great contribution upon which this PowerPoint 2013 specific enhancement (on Windows 10, on a Bluetooth embedded Sony VAIO) is based.

    Can be started with cmd.exe and:
    ~~~~~~~~~~~~~~~~~~~~
    PIEFree.exe /run “wiimoteScripts\lednerg-bartlett WiiMotion Plus Mouse-PowerPoint” /tray
    ~~~~~~~~~~~~~~~~~~~~

    /*
    Submission to example script library follows:
    PowerPoint enhancement of WiiMotion Plus Mouse
    WiiMotion Plus Mouse v 2010.01.14
    by lednerg
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    rbartlett v 2015.09.27
    Remember to boot the Wiimote by holding down buttons ‘1’ and ‘2’
    together until Windows recognises the blessed device. :)

    Modified by Richard Bartlett to customise PowerPoint pointer usage

    Mouse emulated when holding down ‘B’ and moving wiimote in space

    Start presentation in full screen ‘1’
    Advance is button ‘A’
    Reverse is button ‘-‘

    The physical distance between the ‘A’ and ‘-‘ was chosen to reduce
    the likelihood of incorrect navigations that wreck many
    great presentations.

    Top slide is button ‘Home’
    Escape from full screen is button ‘2’

    Laser pointer is shown wheneven you are holding down button ‘+’
    (note you can use mouse as above, by progressing on
    to simultaneously holding button ‘B’ and movement)

    Open another presentation using File-Open is ‘1’ + ‘2’ together.
    This function expects you to have already (button ‘2’)
    escaped out of full screen mode. (mouse function is present as
    above, left mouse button =
    button ‘A’ if you didn’t realise)

    Other keys for convenience
    = D-Pad Down or Right = Advance
    D-Pad Up or Left = Reverse

    lednerg instructions now follow
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Emulates the basic functionality of a Gyration Air Mouse.
    Requires GlovePIE version .42 or higher.

    Leave the Wiimote on your desk when starting so it can calibrate.
    Hold B to move, A = Left-Click, + = Right-Click, Down = Middle-Click.
    */

    var.MoveButton = wiimote.B
    mouse.LeftButton = wiimote.A
    keyboard.Ctrl & mouse.LeftButton = wiimote.Plus
    mouse.MiddleButton = wiimote.Down
    keyboard.leftarrow = wiimote.Minus
    keyboard.Home = wiimote.Home
    keyboard.PageUp = wiimote.Up
    keyboard.PageDown = wiimote.Down
    keyboard.Left = wiimote.Left
    keyboard.Right = wiimote.Right
    /*
    keyboard.Escape = wiimote.2
    keyboard.F5 = wiimote.1
    ( keyboard.Alt & keyboard.F )= wiimote.1 && wiimote.2 */

    if (pressed(wiimote.1)) and (wiimote.2=true) then
    press key.Alt
    wait 50ms
    wait 100ms
    press key.F
    wait 50ms
    release key.F
    release key.Alt
    wait 300ms
    press key.O
    wait 50ms
    release key.O
    endif

    if (pressed(wiimote.1)) and (wiimote.2=false) then
    press key.F5
    release key.F5

    endif
    if (pressed(wiimote.2)) and (wiimote.1=false) then
    press key.Esc
    release key.Esc
    endif

    var.Speed = 75 // 0 to 100

    PIE.FrameRate = 120hz
    if wiimote.HasMotionPlus = false then debug = “WiiMotion Plus NOT DETECTED!”
    if wiimote.HasMotionPlus = true and var.MoveButton = true {
    var.YawSpeed = wiimote.MotionPlus.YawSpeed
    var.PitchSpeed = wiimote.MotionPlus.PitchSpeed
    if SameValue( Smooth(wiimote.SmoothRoll, 10), wiimote.SmoothRoll, 10) then var.Roll = Smooth(wiimote.SmoothRoll, 10) else var.Roll = wiimote.SmoothRoll
    if var.Roll = -90 {
    var.XYswap = 1 – EnsureMapRange(var.Roll, -90, 0, 0, 1)
    var.RightDown = -1
    var.TopUp = 1
    }
    if var.Roll = 0 {
    var.XYswap = 1 – EnsureMapRange(var.Roll, 90, 0, 0, 1)
    var.RightDown = 1
    var.TopUp = 1
    }
    if var.Roll > 90 and var.Roll <= 180 {
    var.XYswap = 1 – EnsureMapRange(var.Roll, 90, 180, 0, 1)
    var.RightDown = 1
    var.TopUp = -1
    }
    if var.Roll = -180 {
    var.XYswap = 1 – EnsureMapRange(var.Roll, -90, -180, 0, 1)
    var.RightDown = -1
    var.TopUp = -1
    }
    var.SpeedX = var.TopUp * var.YawSpeed – ( var.TopUp * var.YawSpeed * var.XYswap ) + ( var.RightDown * var.PitchSpeed * var.XYswap )
    var.SpeedY = var.TopUp * var.PitchSpeed – ( var.TopUp * var.PitchSpeed * var.XYswap) + ( -var.RightDown * var.YawSpeed * var.XYswap )
    mouse.DirectInputX = int(var.MouseX)
    mouse.DirectInputY = int(var.MouseY)
    var.MouseX = var.MouseX + ( var.SpeedX / (10500000 – EnsureMapRange(var.Speed, 0, 100, 0, 10000000) ) )
    var.MouseY = var.MouseY – ( var.SpeedY / (10500000 – EnsureMapRange(var.Speed, 0, 100, 0, 10000000) ) )
    /* // for mouse.x and mouse.y instead
    mouse.x = var.MouseX
    mouse.y = var.MouseY
    var.MouseX = var.MouseX + ( var.SpeedX / (20500 – EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )
    var.MouseY = var.MouseY – ( var.SpeedY / (20500 – EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )
    */
    }
    if var.MoveButton = false {
    var.MouseX = mouse.DirectInputX
    var.MouseY = mouse.DirectInputY
    /* // for mouse.x and mouse.y instead
    var.MouseX = mouse.x
    var.MouseY = mouse.y
    */
    }

Leave a Reply

Your email address will not be published. Required fields are marked *