« SE3 PSE Binome2023-6 » : différence entre les versions
Ligne 118 : | Ligne 118 : | ||
Jeu avec Manette sans les LEDs de vie[[Fichier:Video SpaceInvaders manette.mp4|néant|vignette|Vidéo montrant l'interaction entre la manette et le Space Invaders sans les LEDs pour les vies]]Jeu avec Manette complète | Jeu avec Manette sans les LEDs de vie[[Fichier:Video SpaceInvaders manette.mp4|néant|vignette|Vidéo montrant l'interaction entre la manette et le Space Invaders sans les LEDs pour les vies]]Jeu avec Manette complète | ||
=<div class="mcwiki-header" style="border-radius: 40px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #ED254E; vertical-align: top; width: 98%;"> Archive </div>= | |||
== ''Fichiers'' == | == ''Fichiers'' == | ||
Fichiers: [[Fichier:ManetteUSBLilianPierre.zip]] | Fichiers: [[Fichier:ManetteUSBLilianPierre.zip]] |
Version du 6 juin 2024 à 13:39
Conception de la manette
DESIGN, LIMITES, FONCTIONNALITÉS ET DESCRIPTION DE LA MANETTE
- Taille de la carte : 10x10 cm maximum
- Fonctionne en 5V
- Utilisation de LEDs pour visualiser les vies restantes sur la manette
- 6 boutons : 4 de déplacement mais que deux utilisables (gauche et droite) et les deux autres (haut et bas) pour d'autres jeux à l'avenir. Les deux boutons à droite de la carte, en bas pour tirer, en haut pour quitter.
- Un design inspiré d'une vieille SNES
SCHÉMATIQUE KiCAD
PCB et BRASURE
Programmation
Code C
Pour pouvoir avoir nos boutons fonctionnel on s'est basé sur la démo du joystick pour créer "Manette", et ensuite on est partie d'un code minimal pour pouvoir rajouté la description de notre manette, et créer deux interfaces, une pour nos boutons, et une autre pour nos LEDs.
Manette et minimal trouvable dans TPI_LUFA_LibUSB/manette_LUFA/Polytech/ | ||
Code définissant les conditions de nos boutons. Quels boutons fait quoi et à quel moment. bool GetNextReport(USB_JoystickReport_Data_t* const ReportData)
{
bool InputChanged = false;
/* Clear the report contents */
memset(ReportData, 0, sizeof(USB_JoystickReport_Data_t));
if (~(PINF>>PIN7) & 1) ReportData->Button |= (1 << 1);
if (~(PINF>>PIN6) & 1) ReportData->Button |= (1 << 0);
if (~(PIND>>PIN1) & 1) ReportData->Y = 100;
if (~(PIND>>PIN2) & 1) ReportData->X = 100;
if (~(PIND>>PIN3) & 1) ReportData->X = -100;
if (~(PIND>>PIN5) & 1) ReportData->Y = -100;
InputChanged = 1;
return InputChanged;
}
|
Les PIN6 et PIN7 contrôlent les deux boutons sur la droite de la manette. Vous pouvez voir sur la vidéo dans deux sections avant celle-ci quand nous appuyons dessus les cases "0" et "1" deviennent noires quand nous appuyons sur les boutons | |
Code définissant Les PORTx et DDRx de notre manette. /* Hardware Initialization */
Joystick_Init();
LEDs_Init();
Buttons_Init();
USB_Init();
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
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)
//Boutons A et B
DDRF &= 0b00111111;
PORTF |= 0b11000000;
//Boutons directionnels
DDRD &= 0b11010001;
PORTD |= 0b00101110;
// Allumer les leds
PORTF |= 0b00100011;
PORTE |= 0b01000000;
|
En modifiant le code LUFA donné par le prof, on peut allumer les LEDs, pour celles sur les pins PF0, PF1 et PF5 il faut désactiver le JTAG en copiant deux fois cette ligne au niveau de la déclaration des pins : MCUCR |= (1<<JTD);
En ce qui concerne les LEDs sur PORTE, il n'y a pas de problème dessus. |
Vidéos Présentation
Jeu avec Manette sans les LEDs de vie
Jeu avec Manette complète
Archive
Fichiers
Fichiers: Fichier:ManetteUSBLilianPierre.zip
gerber: Fichiers: Fichier:SE3-pad-job.gbrjob.zip gerber: Fichiers: Fichier:SE3-pad-LGPC.zip
GIT
GiT SpaceInvaders : https://archives.plil.fr/pcasimir/SpaceInvaders.git
GiT Manette