// Attention : Le fonctionnement du programme requiert la DLL nommée : mcHID.dll. // N'oubliez pas d'inclure dans le même répertoire de votre programme cette fameuse DLL !!! unit FormMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls; const // input et out buffer size constants... BufferInSize = 64; BufferOutSize = 64; type // input and output buffers... TBufferIn = array[0..BufferInSize] of byte; TBufferOut = array[0..BufferOutSize] of byte; // main form TForm1 = class(TForm) GroupBox4: TGroupBox; Label1: TLabel; Label2: TLabel; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Timer1Timer(Sender: TObject); private FBufferIn:TBufferIn; FBufferOut:TBufferOut; // Inutilisé dans ce programme car le transfert s'effectue uniquement du PIC vers le PC. function USBEvent(var Msg: TMessage): Boolean; public end; var Form1: TForm1; implementation uses cUSBInterface, cUSBInterfaceTypes; const // VENDOR et PRODUCT ID. // Attention, ne pas changer ces 2 constantes sinon l'interface ne sera plus reconnue. VENDOR_ID = 1240; PRODUCT_ID = 0011; {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Application.HookMainWindow(USBEvent); Connect(Application.Handle); // Indispensable !!! TIMER1.Interval:=200; // Demande au PIC de nous envoyer une mesure TENSION / COURANT à intervalles réguliers. Ici tous les Timer1=200ms. end; //******************************** //* Ne pas supprimer ces lignes. * //******************************** procedure TForm1.FormDestroy(Sender: TObject); begin Application.UnHookMainWindow(USBEvent); end; //********************************** //**************************************************************** //**************************************************************** //* Fonction dédiée au transfert des données du PC vers le PIC. ** //**************************************************************** //**************************************************************** procedure TForm1.Timer1Timer(Sender: TObject); // TIMER. var DevHandle:cardinal; begin FBufferOut[1] := 1; // Permet de demander au PIC de nous envoyer une mesure de TENSION et COURANT DevHandle := GetHandle(VENDOR_ID, Product_ID); // Transfert USB PC vers PIC. Write(DevHandle,@FBufferOut); end; //**************************************************************** //**************************************************************** //* Fonction dédiée au transfert des données du PC vers le PIC. ** //**************************************************************** //**************************************************************** //**************************************************************** //**************************************************************** //* Fonction dédiée au transfert des données du PIC vers le PC. ** //**************************************************************** //**************************************************************** function TForm1.USBEvent(var Msg: TMessage): Boolean; var DevHandle:cardinal; VOLT: Real; V: string; AMPERE: Real; A: string; begin result := False; if Msg.Msg = WM_HID_EVENT then begin case Msg.WParam of //** Ne retirez pas 6 lignes suivantes, elles sont indispensables !!! ** NOTIFY_CHANGED : begin DevHandle := GetHandle(VENDOR_ID,PRODUCT_ID); SetReadNotify(DevHandle,true); result := true; end; //********************************************************************** //********************************* //** Transfert du PIC vers le PC.** //********************************* // L'interface universelle I/O a envoyé des données... NOTIFY_READ : begin DevHandle := Msg.LParam; if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then begin // lecture des données. Read(DevHandle,@FBufferIn); //... Votre CODE ... //********************************************************************************** //** Reception de la valeur sur deux octets représentatifs de la tension mesurée. ** //********************************************************************************** VOLT:=(256*FBufferIn[3])+FBufferIn[2]; // Récupère la valeur de la tension envoyée par USB et fractionnée en deux octets. VOLT:=VOLT*0.01; str(VOLT:0:2,V); label1.Caption:= V+'V'; // Affiche la valeur de la tension. //****************************************************************************** //** Reception de la valeur sur deux octets représentatifs du courant mesuré. ** //****************************************************************************** AMPERE:=(256*FBufferIn[5])+FBufferIn[4]; // Récupère la valeur du courant envoyée par USB et fractionnée en deux octets. AMPERE:=AMPERE/100; str(AMPERE:0:2,A); label2.Caption:=A+'A'; // Affiche la valeur du courant. //... Fin de votre COODE ... end; result := true; end; end; end; end; //******************************************************************** //******************************************************************** //* FIN Fonction dédiée au transfert des données du PIC vers le PC. ** //******************************************************************** //******************************************************************** end.