Cum sa-ti faci o telecomanda cu fir conectata la portul midi

Ce poti sa faci cu telecomanda asta ?
Poti sa comanzi WinAmp-ul,Bsplayer-ul ,sa deschizi Explorerul sau orice comanda iti trece prin cap.

Pentru o telecomanda simpla (cu fir deocamdata) iti trebuie urmatoarele :
   -componenta mea
MyGamePort -pe care o gasesti in sectiunea download.
   -Borland C++ Builder 1 (merge si cu Delphi)
   -cateva intrerupatoare (cate butoane vrei) si niste fire de sarma.

1.Cum functioneaza ?

Principiul de functionare este foarte simplu.Componenta MyGamePort urmareste portul Midi care are 4 iesiri digitale si 4 analog.Este un fel de driver pentru telecomanda pe care o sa o realizezi.Telecomanda e un nume prea pompos pentru cateva intrerupatoare si o mana de sarme, dar deocamdata o sa pastram numele asta.
Acuma sa vedem mai in detaliu structura portului midi
.

Pinii sunt numerotati astfel :

O alta reprezentare arata asa :

Gnd - adica masa (Ground)
D1,D2,D3,D4 sunt intrarile digitale si A1,A2,A3,A4 intrarile analog.

 

2.Realizarea Telecomenzii
Aici in functie de ce vrei sa comanzi cu telecomanda ai nevoie de un 1-8 butoane,niste fire (de preferinta un cablu cu 2-9 fire si un conector de 15 pini (exact ca la joystick).

De exemplu sa zicem ca vrem sa comandam Bsplayer-ul sauWimAmp-ul . Bsplayer este un player popular de filme divX si in plus ofera si suport pentru subtitrari, iar spre deosebire de MicroDvd ,are meniurile chiar si in limba romana.
Sa zicem ca vrem sa avem pe telecomanda butoanele Play, Pause,Stop.Deci vom avea nevoie de 3 butoane pe care le vom conecta la gameport (la portul midi).
Intrarile digitale se afla la pinii 2,7,10,14 iar masa la 4,5,12.

Vom conecta primul buton la pinii 2 si 4, al doilea la 7 si 4 si al treilea buton la 10 si 4 (sau 5 sau 12 - nu conteaza, pentru ca 4,5 si 12 sunt conectate impreuna) . Pentru o intelegere mai buna priveste imaginea de mai jos.

Acuma ca am realizat telecomanda, sa trecem la pasul 2 si anume sa facem programul care urmareste butoanele si face ce trebuie sa faca,adica sa puna pauza ,stop si play la Bsplayer.
Am scris componenta MyGamePort in limbajul pascal si unele linii de cod sunt in assembler ,dar componenta de fapt e pentru Borland Builder ,unde limbajul e C++(ce-a fost in capul meu !?).
Deci primul pas consta in instalarea componentei in Builder : de la Component ->Install->Add->Browse se cauta MyGamePort.pas
Pasul doi : facem programul. (File->New Application)
Includem bsp.h (care va fi copiat in Borland\CBuilder\INCLUDE) :
#include "bsp.h"

Punem pe Form1 : un MyGamePort , un Timer cu Intervalul 50 milisecunde.
La events OnTimer :

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

MyGamePort1->Update=1; //ca sa updateze datele de la port
if(MyGamePort1->Digital1==1)
SendMessage(bsp_hand,WM_BSP_CMD,BSP_Play,0);

if(MyGamePort1->Digital2==1)
SendMessage(bsp_hand,WM_BSP_CMD,BSP_Pause,0);
if(MyGamePort1->Digital3==1)
SendMessage(bsp_hand,WM_BSP_CMD,BSP_Stop,0);

}

bsp_hand -e handle-lul ferestrei Bsplayer,care poate fi obtinut astfel :
HWND bsp_hand;
bsp_hand=FindWindow("BSPlayer",NULL);

Si Gata ! Simplu nu ?

3.Informatii finale

Binenteles ca mai exista si alte comenzi ca : VolumeUp ,VolumeDown,SetSkin GetFileName,de fapt sunt toate comenzile pe care poti sa le dai din Bsplayer.Toate se gasesc in bsp.h ,care se gaseste in directorul unde ati instalat Bsplayerul (de obicei in : Program Files\Webteh\BSPlayer\sdk\Bsp.h ).Tot aici gasiti si Bsp.pas care face acelasi lucru ,numai ca e scris in limbajul pascal.


Codul care ia starea portului midi este scris in assembler :
asm
mov dx,0201h
in al,dx
mov entree,al

Iar pentru reset :
asm
mov dx,0201h
mov ax,00001111b
out dx,al

Astea se gasesc in MyGamePort.pas daca vrei sa te uiti la ele.Atentie ca functioneaza pe win95, 98 dar nu si pe Xp.(deocamdata)
Pentru orice nelamuriri sau intrebari trimite-mi un email la mountain@home.ro

©2004 Mountain