Może to ci coś pomoże jest to jednak jak narazie programik pracujący w oknie MS Dos-a
steruje dwoma silnikami krokowymi
pierwsze cztery bity to jeden silnik kolejne 4 to drugi.
lecz sama inicjacja bibloteki inpout32.dll działa też C++ obiektowym
można też dołożyć funkcję
if (kbhit())
{
if (znak!=getch()) return;
}
w miejsce jak na przykładzie poniżej
będziesz mógł wyskoczyć wcześniej z funkcji jeżeli zmienisz obroty
//--------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <vcl.h>
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
HINSTANCE hDLL;
typedef USHORT _stdcall(*InPortType) (USHORT BasePort);
typedef void _stdcall(*OutPortType) (USHORT BasePort, USHORT value);
InPortType InPort;
OutPortType OutPort;
USHORT PortAddress=0x378;
USHORT Value=0;
// Funkcje
void skret_w_prawo(int czas,char znak)
{
OutPort(PortAddress,17);
Sleep(czas);
/* Opcja celem wyskoczenia z funkcji należy ją wstawić za każdą funkcją Sleep
if (kbhit())
{
if (znak!=getch()) return;
} */
OutPort(PortAddress,34);
Sleep(czas);
OutPort(PortAddress,68);
Sleep(czas);
OutPort(PortAddress,136);
Sleep(czas);
OutPort(PortAddress,0);
}
void skret_w_lewo(int czas)
{
OutPort(PortAddress,136);
Sleep(czas);
OutPort(PortAddress,68);
Sleep(czas);
OutPort(PortAddress,34);
Sleep(czas);
OutPort(PortAddress,17);
Sleep(czas);
OutPort(PortAddress,0);
}
void do_przodu(int czas)
{
OutPort(PortAddress,129);
Sleep(czas);
OutPort(PortAddress,66);
Sleep(czas);
OutPort(PortAddress,36);
Sleep(czas);
OutPort(PortAddress,24);
Sleep(czas);
OutPort(PortAddress,0);
}
void do_tylu(int czas)
{
OutPort(PortAddress,24);
Sleep(czas);
OutPort(PortAddress,36);
Sleep(czas);
OutPort(PortAddress,66);
Sleep(czas);
OutPort(PortAddress,129);
Sleep(czas);
OutPort(PortAddress,0);
}
// Koniec funkcji
int main(int argc, char* argv[])
{
hDLL=LoadLibrary("inpout32.dll");
if(hDLL)
{
InPort=(InPortType) GetProcAddress(hDLL,"Inp32");
OutPort=(OutPortType) GetProcAddress(hDLL,"Out32");
}
else
ShowMessage("Bład przy ladowaniu pliku");
//
int czas=10;
char znak;
while('p'!=(znak=getch()))
{
switch(znak)
{
case char(72):
do_przodu(czas,znak);
break;
case char(80):
do_tylu(czas,znak);
break;
case char(75):
skret_w_lewo(czas,znak);
break;
case char(77):
skret_w_prawo(czas,znak);
break;
case 'a':
czas=czas+1;
cout<< "szybkosc = " << czas << endl;
break;
case 'z':
czas=czas-1;
cout<< "szybkosc = " << czas << endl;
break;
}
}
// zakończenie i wyzerowanie
OutPort(PortAddress,0);
return 0;
}