« SE3 PSE Binome2023-2 » : différence entre les versions
(→LUFA) |
|||
Ligne 107 : | Ligne 107 : | ||
[[Fichier:Descriptor.h.png|alt=Descriptor.h|vignette|800px|left|Descriptor.h]] | [[Fichier:Descriptor.h.png|alt=Descriptor.h|vignette|800px|left|Descriptor.h]] | ||
<p style="clear: both;" />On fusionne | <p style="clear: both;" />On fusionne ensuite les deux decriptor.c en un seul. | ||
Et enfin, on fusionne également le fichier minimal.c et le fichier joystick.c en un fichier nommé Fusion_Minimal_Joystick.c. | |||
=== Utilisation de la manette pour le jeu === | === Utilisation de la manette pour le jeu === |
Version du 6 juin 2024 à 23:54
Sujet : Manette de jeu
Cahier des charges
Concevoir une manette de jeu vidéo, afin de pouvoir jouer à Space Invader, codé en informatique. Utilisation d'au moins 3 boutons poussoirs, 2 pour les déplacements à gauche, à droite, et 1 pour pouvoir tirer des missiles sur les monstres. Utilisation de LEDs afin de savoir le nombre de vies restant à l'utilisateur.
Lien GIT
https://archives.plil.fr/sdeparis/projet_manette_sd_ah.git
Partie électronique
Kicad
Schématique et routage
Lors du routage, n'ayant jamais réalisé de carte auparavant, nous n'avions pas conscience des faibles dimensions de cette dernière. Par conséquent, les boutons sont très rapprochés, ce qui ne facilite pas leur utilisation.
Nous avons également ajouté des vias afin d'uniformiser le plan de masse.
Fichier Gerber
Soudure
PCB sans composants
Soudure des principaux composants
De plus, nous avons soudé les boutons poussoirs sur le dessus de la carte, sans tenir compte du fait qu'ils étaient traversants. Par conséquent les boutons poussoirs ne sont pas tous au même niveau.
Partie programmation
Implémentation d'un programme en C pour allumer les LEDs d'un PCB
Dans cette partie, nous avons testé notre programme qui permet de faire clignoter les leds sur une carte des étudiants de l'année dernière.
#include <avr/io.h> #include <stdio.h> #include <util/delay.h> int main(){ CLKSEL0 = 0b00010101; // sélection de l'horloge externe CLKSEL1 = 0b00001111; // minimum de 8Mhz CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1) CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1) DDRD |=0x03; // car on souhaite déclarer en sortie les ports 0 et 1 ce qui correspond à 3 en hexa while(1){ PORTD ^=0x03; // le xor permet d'allumer et éteindre les leds successivement _delay_ms(1000); // tps en ms } return 0; }
Détection du mode DFU sur notre carte
Utilisation de la carte Arduino Uno afin de détecter le mode DFU
Initialisation de notre carte
Programmation des leds
Programmation des boutons
LUFA
Modification de la LUFA téléchargée en version low level, qui est la bibliothèque USB permettant de communiquer entre le PC et la manette.
En premier lieu, nous avons modifié les fichiers minimal.c et descriptor.c afin que la manette soit détectée en mode DFU.
Pour tester les programmes sur notre carte, on vérifie d'abord que la carte est bien en mode DFU à l'aide de la commande lsusb puis on exécute ensuite le programme à l'aide de la commande make.
Joystick
Afin de pouvoir déplacer notre vaisseau sur le jeu Space invaders, nous avons besoin des déplacements en x à gauche et à droite de l'écran. Pour se déplacer à gauche, on utilise le premier bouton SW1 et pour aller à droite, on utilise le dernier bouton SW4.
Pour tirer des missiles sur les monstres, nous avons besoin besoin d'appuyer sur le deuxième bouton poussoir SW2.
Nous avons modifié le fichier descriptor.c afin de permettre à la carte d'être détectée en tant que joystick. Afin que les boutons soient détectés comme étant des joysticks, on déclare les boutons en tant qu'entrées puis on attribue à chaque bouton sa fonction (déplacement ou tir).
Fusion de minimal et de descriptor
L'objectif de cette partie est de fusionner les fichiers pour pouvoir contrôler les leds et les boutons en même temps.
Pour cela, on fusionne le fichier descriptor du joystick et le fichier descriptor du minimal en un seul fichier descriptor. On aura donc deux interfaces, une pour le joystick et une pour les leds réunies au sein d'un même fichier.
On fusionne ensuite les deux decriptor.c en un seul. Et enfin, on fusionne également le fichier minimal.c et le fichier joystick.c en un fichier nommé Fusion_Minimal_Joystick.c.
Utilisation de la manette pour le jeu
Afin d'utiliser le Joystick sur notre jeu Space Invaders, on programme le joystick à l'aide de la bibliothèque SDL.
Sur la capture "gestion Joystick sur le jeu", plusieurs fonctions sont implémentées. La dernière fonction "bouton_joystick_equivalent_touche_clavier" nous permet d'assimiler les boutons du joystick aux boutons du clavier. Par exemple, lors d'un appui sur le bouton S1, le vaisseau se déplace à gauche par le bais de la fonction qui renvoie donc le caractère 'q' utilisé en tant que paramètre touche dans la fonction gestionEventClavier(). De même pour le bouton S4, où la touche 'd' est renvoyée ou bien pour le bouton S2, où la touche 's' est renvoyée puis utilisée en tant que paramètre dans la fonction gestionEventClavier().
Le mode Joystick de notre carte n'étant plus détecté par le PC, nous n'avons pas pu tester les programmes ci-dessus.