Composant pour gérer wiimote(s) + nunchuk

Description

Bonjour tout le monde,

Le composant qui se trouve dans le zip permet d?utiliser une (ou plusieurs) Wiimote dans vos projets Delphi, et le programme qui l?accompagne est un exemple que j?ai fait très rapidement pour montrer comment se servir du composant.

C?est le premier composant que je fais donc tout le code n?est peut être pas optimisé, donc j?espère que vous serez indulgent XD, j?ai essayé de commenter le composant le plus possible pour que ce soit le plus clair possible.

Pour l?utiliser, vous avez impérativement besoin d?avoir installé le Composant HIDKomponent que vous pouvez trouver sur ce site : http://www.delphi-gems.com dans la partie All Download.
Et vous trouverez très facilement sur internet, la procedure pour connecter la Wiimote au PC. ( pour ceux qui ont Vista, il faut la version 5.x.x de BlueSoleil que vous trouverez ici : http://www.bluesoleil.com/download/ sinon ça ne fonctionne pas).

Le seul inconvénient, est que pour pouvoir gérer plusieurs wiimote en même temps (je n?ai testé qu?avec deux) j?ai du modifier une fonction du composant HIDKomponent, la modification à faire est expliquée un peu plus bas et dans le code.

Source / Exemple :


//Pour gérer plusieurs wiimotes en même temps, il faut modifier une fonction du composant //HIDKomponent
//dans l'unité:
//JvHidControllerClass, la fonction CheckOutByID (~2100 eme ligne) il faut lui rajouté un //parametre et une petite ligne,

//modifier l'entête :
function TJvHidDeviceController.CheckOutByID(var HidDev: TJvHidDevice; const Vid, Pid: Integer): Boolean;
//***par***//
function TJvHidDeviceController.CheckOutByID(var HidDev: TJvHidDevice; const Vid, Pid: Integer; NumWiimote: Integer = 0): Boolean;

//et la fonction

function TJvHidDeviceController.CheckOutByID(var HidDev: TJvHidDevice;
  const Vid, Pid: Integer): Boolean;
var
  I: Integer;
begin
  Result := False;
  HidDev := nil;
  for I := 0 to FList.Count - 1 do
  begin
    Result := CheckThisOut(HidDev, I, (Vid = TJvHidDevice(FList[I]).Attributes.VendorID) and
      ((Pid = TJvHidDevice(FList[I]).Attributes.ProductID) or (Pid = -1)));
    if Result then
      Break;
  end;
end;

//***par***//

function TJvHidDeviceController.CheckOutByID(var HidDev: TJvHidDevice;
  const Vid, Pid: Integer; NumWiimote: Integer = 0): Boolean;
var
  I: Integer;
begin
  Result := False;
  HidDev := nil;
  for I := 0 to FList.Count - 1 do
  begin
   if I < NumWiimote-1 then continue;  //Ligne rajoutée
    Result := CheckThisOut(HidDev, I, (Vid = TJvHidDevice(FList[I]).Attributes.VendorID) and
      ((Pid = TJvHidDevice(FList[I]).Attributes.ProductID) or (Pid = -1)));
    if Result then
      Break;
  end;
end;

Conclusion :


le seul fait de déposer le composant sur la fiche et lancer le programme ne suffit pas à se "connecter" à la wiimote, il faut également se servir des fonctions
Wiimote1.RunWiimote ;
et
Wiimote1.StopWiimote ;
Ça sera corrigé pour qu?il n?y ai plus ces lignes à ajouter.

Je me suis aidé de la source du logiciel WiinRemote (http://onakasuita.org/wii/index-e.html) pour l?envoi de donnée à la wiimote, et pour les jolis graphiques représentant les accéléromètres.
Et surtout du site Wiili.Org pour leur super travail sur le décodage de la wiimote :
http://www.wiili.org/Wiimote
http://www.wiili.org/index.php/Wiimote/Extension_Controllers/Nunchuk

j'espere que ce composant sera util :P

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.