Port joystick

cs_leon1 Messages postés 3 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 11 janvier 2006 - 10 janv. 2006 à 22:12
cs_leon1 Messages postés 3 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 11 janvier 2006 - 11 janv. 2006 à 18:13
Bonsoir.
Bonne année à tous.
J' avais écris il y à une dizaine d'années (j'ai repris mes études et fait un dut à 35 ans) ce petit prog qui lisait et enregistrai les voies du port joystick (lecture et enregistrement de données pour un radiotelescope).
Comme vous voyez, il est en C.
Evidement, cela ne fonctionne pas sous Xp....
J'arrive pas à comprendre pourquoi...
Je me suis récupéré VC++6 il y a un mois, et je m'y suis mis.
Je dois vieillir, pas moyen d'en faire quelquechose.
Quelqu'un peu faire quelquechose pour moi, pour une voie, par exemple, je me débrouillerai pour le reste.

Merci, d'avance, et j'ai des chocolats en rab !!!

Leon.
leon.ternoy@laposte.net

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <time.h>
#include
#include

int main()
{/* DEBUT DU PROG PRINCIPAL **************************************************************/
/* Declaration des Fonctions et Procedures */
int PasteInFile(int Val1,int Val2,FILE *stream);
long FreeOnDisk(int ValDisk);

/* Declaration des variables */
int Compt=0,Carac=0,Js1x=0,Js1y=0,Js2x=0,Js2y=0,i;
int CanalEnreg=2,PrecedCanalEnreg=2;
FILE *stream; /* declaration du fichier d'enregistrement des valeur mesurees */
struct date d;struct dostime_t t; /* structure pour l'heure et la date */
time_t tps=0,LastTime=0,LastRafraich= time(NULL);
int TabBinValPort[8],Date;

// DEBUT DU PROGRAMME
char CheminDisk[40]="c:\\joysdata.txt"; /* chemin d'enregistrement par defaut */
float Intervalle=1; /* valeur defaut */
stream = fopen(CheminDisk, "w+"); /* ouvre le fichier CheminDisk a mettre a jour*/
clrscr();

while(Carac!=113) /*touche q pour quitter*/
{Compt=Compt+1;
gotoxy(4,1);printf("Prog d'enregistrement des donnees du port Joystick");
gotoxy(1,3);printf("tour=%d\n", Compt);
Carac=0; /* reinitialisation du clavier */
if (kbhit()) Carac = getch();

if (Carac==112) /* touche p (faire une pause) */
{Carac=0;
while(Carac!=112) /* tant que la touche p n'est pas entree */
{if (kbhit()) Carac = getch();
gotoxy(15, 3);
printf("Pause");
}
gotoxy(15, 3);printf(" ");}

/*clrscr();*/
union REGS regs;
regs.h.ah = 0x84;
regs.x.dx = 1;
int86(0x15,&regs,&regs);
Js1x=regs.x.ax;
Js1y=regs.x.bx;
Js2x=regs.x.cx;
Js2y=regs.x.dx;
gotoxy(2, 4);printf("Valeur lue en J 1x (canal 1)= %d \n",Js1x);
gotoxy(2, 5);printf("Valeur lue en J 1y (canal 1)= %d \n",Js1y);
gotoxy(2, 6);printf("Valeur lue en J 2x (canal 2)= %d \n",Js2x);
gotoxy(2, 7);printf("Valeur lue en J 2y (canal 2)= %d \n",Js2y);
gotoxy(4, 8);printf("Valeurs du canal %d enregistrees \n",CanalEnreg);

if (Carac==102) /* touche f=fichier */
{gotoxy(1,10);
printf("Nouveau chemin d'enregistrement (de la forme [Lecteur]:[Rép][SsRép][Fichier]):\a");
fscanf(stdin, "%s", &CheminDisk);stream = fopen(CheminDisk, "w+");}
else{gotoxy(1,10);printf("Chemin d'enregistrement= %s ",CheminDisk);}

if (Carac==99) /* touche c=canal */
{if (PrecedCanalEnreg==2) {PrecedCanalEnreg=1;CanalEnreg=1;}
else{PrecedCanalEnreg=2;CanalEnreg=2;}
}

if (Carac==105) /* touche i=Intervalle */
{gotoxy(1, 11);printf("Nouvel interval des enregistrements(en secondes):\a");
fscanf(stdin, "%f", &Intervalle);Carac=0;}
else{gotoxy(1,11);printf("Interval des enregistrements(en sec)= %f ",Intervalle);}

tps = time(NULL);

if(tps>LastRafraich+10){LastRafraich=tps;clrscr();}

// ENREGISTREMENT
if (CanalEnreg==1)
{if (tps>=LastTime+Intervalle)
{PasteInFile(Js1x,Js1y,stream);
LastTime=time(NULL);
gotoxy(22,3);printf("ENREGISTREMENT au tour=%d", Compt);
} }
if (CanalEnreg==2)
{if (tps>=LastTime+Intervalle)
{PasteInFile(Js2x,Js2y,stream);
LastTime=time(NULL);
gotoxy(22,3);printf("ENREGISTREMENT au tour=%d", Compt);
} }
// Fin Enreg
gotoxy(1,12);printf("Le disque actif offre %ld octets libres ", FreeOnDisk(3));

gotoxy(2, 14);printf("c = pour changer le Canal d'enregistrement.");
gotoxy(2, 15);printf("i = pour changer l'Intervalle d'enregistrement.");
gotoxy(2, 16);printf("f = pour changer le Fichier d'enregistrement.");
gotoxy(2, 17);printf("p = pour faire une Pause ou recommencer.");
gotoxy(2, 18);printf("q = pour Quitter le programme.");

}//FIN WHILE
}// FIN PROG PRINCIPAL ***********************************************************************

/*********Fonction de calcul d'espace libre sur le disque c:**************/
/*Retourne la valeur de l'espace libre du disque c:*/
long FreeOnDisk(int ValDisk)
{struct diskfree_t free;
long avail;
if (_dos_getdiskfree(0, &free) != 0) {
printf("Disque dur plein()\n");
exit(1);}
avail = (long) free.avail_clusters * (long) free.bytes_per_sector * (long) free.sectors_per_cluster;
return (avail);
}/*fin fonction FreeOnDisk*/

/*******************Fonction de copie de donnees vers fichier*************/
/*Cette fonction copie des valeurs dans un fichier compatible Access
en precisant le moment de l'action copier*/
int PasteInFile(int Val1,int Val2,FILE *stream)
{ struct date d; struct dostime_t t;
getdate(&d); _dos_gettime(&t);
fprintf(stream, "\n%d/%d/%d; %2dh%02d:%02d:%02d; %d;%d;", d.da_day,d.da_mon,d.da_year,t.hour, t.minute,t.second,t.hsecond,Val1,Val2); /*écrit des données dans le fichier*/
return 0;
}/*fin fonction PasteInFile*/

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 janv. 2006 à 01:16
Ne le prends pas mal mais sérieux je ne vois rien à conserver là dedans, efface tout.
Faudra te familiariser avec la prog API, vu que tu connais le C devrait pas y avoir de problème.
http://brunews.free.fr/brunews/download/CP5.zip
http://brunews.free.fr/brunews/download/CP5Sources.zip


http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

Les fonctions joystick simples sont dans Mmsystem.h (joyXXXX) mais je pense que tu verras cela un peu plus tard.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
cs_leon1 Messages postés 3 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 11 janvier 2006
11 janv. 2006 à 18:13
Bonsoir à tous.
Merci [auteurdetail.aspx?ID=39449 BruNews], de ta réponse.
C'est toujours sympas de recevoir une réponse encourageante, de voir que le respect des anciens est toujours là !!!!!!
Je vais me lancer dans l'étude de tes docs, et puis on verra.
Si j'ai une veine qui pète dans le cerveau, on connaitra lez coupable !!!
Bon, je repart en formation.
Cordialement.
Léon.
0
Rejoignez-nous