Gaming Gaming Controller Hardware Testberichte

Kabellose PC-Steuerung mit Nintendo Wiimote | Igors Retro

Vor fast 12 Jahren habe ich einmal ein kleines Bastelprojekt veröffentlicht, das mir jetzt zufällig beim Aufräumen wieder in die Finger gefallen ist. Lustigerweise funktioniert das Gnaze immer noch, denn auch den alten PC habe ich wieder rausgekramt. Nur die Akkus der Steuerung musste ich ersetzen, der Rest lief erstaunlicherweise noch wie damals.

Nachdem die Wiimote angeschlossen ist und eine funktionierende Sensorbar existiert, müssen wir uns nun um die passende Umsetzung der Wiimote-Informationen in eine funktionierende Steuerung kümmern. Das ideale (weil programmierbare) Werkzeug ist das kostenlose Programm GlovePIE, welches wir uns zunächst herunterladen. Die Installation von GlovePIE gibt keine Rätsel auf, so dass man eigentlich sofort loslegen kann. Wichtig ist dabei, dass dieses Programm mit ausführbaren Scripten arbeitet und als Programm selbst keine fertige Lösung, sondern nur Entwicklungsumgebung und Interpreter ist! Allerdings sollte man sich davon nicht abschrecken lassen, denn durch die Eingriffsmöglichkeiten kehrt sich dieser vermeintliche Nachteil schnell in einen Vorteil um.

Das Programm bietet bereits eine Vielzahl vorgefertigter Scripte, die sich über das Menü „File“ und den Menüpunkt „Open“ laden und modifizieren lassen. Mit „Run“ wird die Ausführung gestartet und mit „Stop“ beendet. Da oft genug die Maus genutzt wird und es bei Fehlern zu Blockierung der Mauseingaben kommen kann, sei an die Tastenkombination „Alt + R“ erinnert, mit der man in diesem Fall das Menü „Run“ öffnet. Danach einfach mit den Pfeiltasten auf den „Stop“-Eintrag und „Enter“ drücken. Wer fingerfertig ist, kann auch mit „Shift+P+I+E“ abbrechen. Und nie vergessen, fertige Scripte abzuspeichern, sonst fängt man beim nächsten Mal wieder von vorn an.

Wir werden im Folgenden verschiedene Anwendungsszenarien und Steuerungsvarianten testen und die jeweiligen Scripte als „Copy & Paste“-Text anfügen. So sollte auch ungeübten Anwendern eine eigene Programmierung problemlos gelingen. Wenn also in den nächsten Beispielen Scripte beschrieben werden, so beziehen sich diese stets auf GlovePIE 0.29.

Erwähnt sei auch, dass es mittlerweile für viele Spiele eigene und speziell angepasste Scripte gibt. Wer sich also bei der Programmierung nicht sicher ist oder einfach nur Anregungen sucht, der findet über jede Suchmaschine recht schnell eine Unmenge nützlicher Links. Außerdem gibt es unzählige Foren und Communities rund um die Wiimote. Unser Artikel beschäftigt sich daher nur mit den Grundlagen und Anwendungsmöglichkeiten, da die Vielfalt einfach den Rahmen des Lesbaren sprengen würde.

Die Wiimote verfügt wie schon erwähnt über mehrere Tasten. Diese Tasten lassen sich in der Script-Sprache von GlovePIE sehr schnell und einfach den gewünschten Tasten des Keyboards zuweisen. Die Script-Sprache funktioniert dabei objektorientiert, so dass der Syntax auch für Neueinsteiger leicht zu überschauen und logisch nachzuvollziehen ist. Die Wiimote ist dabei als Objekt mit Properties (Eigenschaften) zu betrachten: 

Wiimote.Eigenschaft

Die Tasten der Wiimote werden deshalb folgerichtig so definiert:

Wiimote.Up          Wiimote.Down
Wiimote.Left        Wiimote.Right
Wiimote.One        Wiimote.Two
Wiimote.A           Wiimote.B
Wiimote.Home     Wiimote.Plus
Wiimote.Minus

Diesen Properties (Eigenschaften) des Objektes können nun wahlweise Werte zugewiesen werden, bzw. die Werte für das jeweilige Property ausgelesen werden, soweit es Werte besitzt und dies sinnvoll ist. Die Tasten der Tastatur werden entweder einfach durch den betreffenden Buchstaben (also z.B. a) dargestellt.

w = Wiimote.Up
s = Wiimote.Down
a = Wiimote.Left
d = Wiimote.Right

Diese vier Befehlszeilen legen die Aktionen des Tastenkreuzes der Wiimote auf die üblichen Tasten (wsad) für die Bewegung innerhalb eines Spieles um. Wenn man jetzt diese Zeilen in das GlovePIE-Fenster kopiert und mit „Run“ ausführt, hat man bereits die erste eigene Wiimote-Steuerung programmiert, die in jedem Spiel, welches diese Kombination nutzt sofort verfügbar ist. Die Tastatur funktioniert natürlich trotzdem weiterhin wie gewohnt. Natürlich lassen sich die Tasten auch kombinieren und man kann selbstverständlich auch andere Tasten als nur Buchstaben verwenden. Hier ein Beispiel für das Legen des Tastenkreuzes der Wiimote auf die Richtungstasten (Pfeiltasten) der Tastatur und Beispiele für Tastenkombinationen:

Up = Wiimote.Up
Right = Wiimote.Right
Left = Wiimote.Left
Down = Wiimote.Down
Shift+a = Wiimote.One
Ctrl+b = Wiimote.Two
Tab+c = Wiimote.A
Home && Enter = Wiimote.Home

Nachdem wir wissen, wie wir die Tasten belegen können, testen wir das Erlernte anhand zweier Scripte. Allerdings ist darauf zu achten, dass beide Playerfenster jeweils sichtbar sind und im Vordergrund liegen. Zunächst erst einmal das Script für den Windows Mediplayer:

Mediaplayer-Script:

//Abspieltasten
CTRL && P = Wiimote.A         //Play und Stop

//Navigation
Control && F = Wiimote.Right   //Nächstes Lied
Control && B = Wiimote.Left    //Voriges Lied
Home && Enter = Wiimote.Up     //Anfang der Playlist
End && Enter = Wiimote.Down    //Ende der Playlist

//Lautstärke

F8 = Wiimote.Minus
F9 = Wiimote.Plus

GlovePIE mit dem WMP-Script

Der ferngesteuerte WMP

Winamp-Script:

//Abspieltasten
x = Wiimote.A              //Play
v = Wiimote.Home        //Stop
Shift+v = Wiimote.B     //Stop mit Ausblenden

//Navigation
b = Wiimote.Right          //Nächstes Lied
z = Wiimote.Left           //Voriges Lied
Ctrl+z = Wiimote.Up        //Anfang der Playlist
Ctrl+b = Wiimote.Down      //Ende der Playlist
Left = Wiimote.One         //5 Sekunden zurück springen
Right = Wiimote.Two        //5 Sekunden vor springen

//Lautstärke
Down = Wiimote.Minus

Up = Wiimote.Plus

Nach der Tastensteuerung kommt nun erstmals die selbstgebaute Sensorbar zum Einsatz. Zunächst emulieren wir die Maustasten nach dem bereits bekannten Schema:

Mouse.RightButton = Wiimote.A
Mouse.LeftButton = Wiimote.B
Mouse.MiddleButton = Wiiote.Home

Der nächste Schritt ist die Umsetzung der Bewegung in die zweidimensionale X-Y-Umgebung des Bildschirms. Auch dies ist im Prinzip recht simpel, erfordert aber zunächst erst einmal eine Kalibration, denn jede Wiimote reagiert ein klein wenig anders. Dazu kopieren wir folgendes kleines Script und führen es aus:

Kalibrierungsscript:

var.accx = wiimote.RawForceX
var.accy = wiimote.RawForceY
var.accz = wiimote.RawForceZ

debug = var.accx + “ “ + var.accy + “ “ + var.accz

In der Debugzeile können wir die Kalibrierungswerte ablesen

Diese Werte, in unserem Falle 7 / 20 / 6, tragen wir im nachfolgenden Mausscript als Vorgabewerte für den Versatz ein. Dieser Code ist bereits etwas umfangreicher und basiert in den Grundzügen auf dem Script von vkapadia.

Übersicht über die verfügbaren Optionen:

  • Mausbewegung und drei klickbare Maustasten
  • Scrollen mit dem Mausrad
  • Richtungstasten steuern über das Tastenkreuz der Wiimote (D-Pad)

Die Steuerung ist etwas komplex, da die Position zunächst ausgelesen und berechnet werden muss, bevor sie als X/Y-Wert an die Maus übergeben werden kann. Interessant ist auch die umgesetzte Begrenzung des Bewegungsspielraums anhand der Bildschirmgröße.

Fertiges Mausscript:

//Zunächst tragen wir die Variablen aus unserem Kalibrierungsscript ein

var.xtrim = 7
var.ytrim = 20
var.ztrim = 6
//

//Das Tastenkreuz wird auf die Pfeiltasten umgesetzt

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

//Auslesen der ermittelten Positionsänderung der Wiimote
//und Korrektur mit den Kalibrierungswerten

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)
  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

Danke für die Spende



Du fandest, der Beitrag war interessant und möchtest uns unterstützen? Klasse!

Hier erfährst Du, wie: Hier spenden.

Hier kannst Du per PayPal spenden.

About the author

Igor Wallossek

Chefredakteur und Namensgeber von igor'sLAB als inhaltlichem Nachfolger von Tom's Hardware Deutschland, deren Lizenz im Juni 2019 zurückgegeben wurde, um den qualitativen Ansprüchen der Webinhalte und Herausforderungen der neuen Medien wie z.B. YouTube mit einem eigenen Kanal besser gerecht werden zu können.

Computer-Nerd seit 1983, Audio-Freak seit 1979 und seit über 50 Jahren so ziemlich offen für alles, was einen Stecker oder einen Akku hat.

Folge Igor auf:
YouTube   Facebook    Instagram Twitter

Werbung

Werbung