Projet : voiture
Le principe de ce projet est de réaliser un système permettant de diriger une voiture téléguidée par l’intermédiaire du port parallèle d’un ordinateur relié à la télécommande d’une voiture téléguidée. Pour cela il suffit d’envoyer une information codée sur 2 bits (vitesse et direction) en hexadécimal. Un décodeur DAC convertit alors le signal numérique en analogique puis est envoyé à la voiture. L’essentiel du travail que nous allons vous présenter se situe en amont du système et consiste à envoyer l’information sur le port parallèle. Pour cela nous utilisons un langage permettant de réaliser cette fonction : Le Borland C++ qui possède la fonction OUTPORT()
I. Projet
1) objectif : une interface de commande graphique.
2) Principe de fonctionnement
II. Réalisation du programme
1) Problème rencontré
2) Etapes de la construction
1) objectif : une interface de commande graphique.
L’objectif que nous nous sommes fixé était de réaliser une interface de commande graphique pour contrôler la voiture. Cette interface devait présenter les 8 directions, relatives aux déplacements de la voiture, un bouton de fin de programme, et une option : enregistrer et charger un parcours. Ces boutons devaient se présenter sous forme d’image cliquable par l’utilisateur. Le programme doit permettre également l’utilisation du clavier pour pouvoir la diriger.
Les touches suivantes sont utilisées :
· 7, 8, 9 pour avancer
· 1, 2, 3 pour reculer
· 1, 4, 7 pour tourner les roues à gauche
· 3, 6, 9 pour tourner les roues à droite
· p pour enregistrer un parcours
· m pour l’exécuter
· et Esc pour sortir du programme
Le programme réalisé doit également dessiner le parcours à l’écran et indiquer la position et la direction de la voiture.
2) Principe de fonctionnement
Lorsque l’on exécute le programme, celui-ci lance une introduction chargeant les différents boutons à l’écran. Il initialise ensuite les variables et donne les instructions de commande de la voiture. Il crée également un fichier temporaire nommé : parcours.txt sur la racine C:/ du système. Il se met ensuite en attente d’un événement du type onmousedown ou onkeyboard. Lorsqu’il reçoit la valeur de la touche pressée ou du bouton cliqué par l’utilisateur, il effectue un test pour l’identifier à une action.
- Si la touche pressée correspond à un chiffre du pavé numérique alors, il envoie sur le port parallèle les informations vitesse et direction relative à la valeur de la touche appuyée. Le programme place ensuite un pixel position (initialement au milieu de l’écran) puis incrémente les coordonnées suivant la direction de la voiture et une flèche pour l’indiquer à l’écran. Puis le programme revient en attente.
- Si la touche pressée est un enregistrement du parcours, le programme copie les coordonnés relatives au déplacement dans le fichier texte initialement ouvert. Eventuellement il serait également possible d’enregistrer des variables telles que le nom du joueur, et son temps sur le parcours (possibilité ainsi de comparer les scores des différents joueurs).
- Si la touche pressée est le chargement du parcours, le programme lit les valeurs enregistrées sur le fichier texte, récupère le texte sous la forme d’une suite de couple de coordonnées (x, y) séparées par un point virgule. Il est nécessaire ensuite de traiter la chaîne de caractères avec une fonction du style de explode ( objet séparateur, valeur de la chaîne [, limite]). Cette fonction renvoie la valeur dans un tableau des éléments séparés par le point virgule (objet séparateur). Le tableau se présentera de la forme : Array[i] = (xi, yi). Il est ainsi possible de faire une boucle de la longueur du tableau, où l’on identifie chaque valeur des éléments à une direction. Puis il exécute (envoie des informations de direction et de vitesse à la voiture, placement du pixel de position et de la flèche de direction) reproduisant ainsi le parcours.
- Si la touche appuyée est Esc, le programme enregistre les valeurs du parcours si celles-ci ne sont pas déjà enregistrées, ferme le fichier texte, affiche une phrase signalant l’emplacement du fichier parcours.txt, et le temps réalisé. Le programme peut ensuite se fermer.
1) Problème rencontré
Le problème majeur rencontré dans la conception de cette interface de commande à été la difficulté de trouver un langage informatique approprié. En effet, l’instruction outport() en Borland C++ ou out en basic sont indispensables pour écrire sur le port mais ces langages ne permettent pas de détecter un événement avec la souris. Nous avons donc cherché un langage permettant de le faire. Nous avons trouvé que le Fireswork (langage de flash Macromédia) offrait la possibilité de contrôler un programme C++ en utilisant les FSCommand. Flash envoie ainsi les variables "commands" et "args" au programme C++. Il suffit ensuite récupérer les variables grâce à la classe CShockwaveClass de Visual Studios de Microsoft. Nous n’avons trouvé cette solution qu’assez tardivement et n’avons donc pas pu l’appliquer. Nous sommes restés en Borland C++ et donc dans l’impossibilité d’utiliser la souris.
2) Etapes de la construction
Tout d’abord, nous avons préparé l’algorithme central constitué d’une boucle switch, permettant à l’appui d’une touche, de comparer cette valeur avec une direction et d’envoyer l’information sur le port. Nous avons ensuite utilisé le mode BGI-DOS de Borland C++ pour créer le graphique. A l’appui d’une touche, une petite fonction permettait d’afficher un court texte expliquant le mouvement de la voiture, du genre ‘avance’ ou ‘tourne sur la gauche’ …
La seconde évolution à été de dessiner une flèche qui se déplace sur un axe vertical ou horizontal vers la gauche et vers la droite. Seulement cette fonction ne définissait pas une position mais juste une direction. Nous avons donc eu l’idée d’utiliser une variable de positionnement : pos_x et pos_y qui s’incrémentait lors de l’appui sur une touche.
Il nous a ensuite suffit de dessiner 8 flèches à l’aide de 4 segments de droites successives et de les positionner à la valeur de pos_x et pos_y, puis, finalement, de rajouter quelques lignes de commande permettant d’enregistrer les valeurs de positionnement. Nous n’avons pas eu le temps de réaliser la fonction lecture du parcours mais les grandes lignes de cette étape sont écrites précédemment. N’ayant pas besoin de relire le fichier texte, nous avons donc enregistré les valeurs des touches appuyées sous forme de phrases pour une relecture plus facile de l’utilisateur. Pour des raisons de facilité, le bouton enregistrement du parcours n’est pas non plus créé, mais toutes les valeurs sont enregistrées au fur et à mesure de leur exécution. Pour le placer, il suffirait d’une simple variable indiquant l’état du bouton et lors de l’enregistrement des valeurs, de tester son état. Télécharger documentation |