# Tutorat système - Manette de jeu Arduino en USB par Rémi Guillomon et Guillaume Cremaschi **Objectif :** Utiliser un shield Arduino de jeu broché sur une Arduino UNO et assurer la liaison USB à un PC. ## I. Compilations et exécution Les compilations et l'exécution se déroulent en plusieurs étapes. - Étape 1: Vérifiez que la carte ne soit pas flashée. ``` lsusb ``` Si l'ATMega16u2 est déjà flashé, il faut enregistrer le binaire du lien : https://raw.githubusercontent.com/arduino/ArduinoCore-avr/master/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex Court-circuitez les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur Puis écrivez dans un terminal : ``` dfu-programmer atmega16u2 erase dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex dfu-programmer atmega16u2 reset ``` Débranchez et rebranchez le port USB de la carte. - Étape 2 : Compilation et chargement du programme main.c dans l'ATMega328P Dans un terminal, entrez ces commandes. ``` make all make upload ``` Passez en root pour l'upload si nécessaire. Vous pouvez tester ce progrmme directement avec la commande ``` minicom -8 -o -b 9600 -D /dev/ttyACM0 ``` - Étape 3: Flasher l'ATMega16U2 avec le programme de la partie 3 Entrez dans le répertoire suivant et compilez ``` cd lufa-master/PolytechLille/PAD/ make all ``` Puis Flashez le micro-contrôleur : Court-circuitez les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur et tapez ces lignes ``` dfu-programmer atmega16u2 erase dfu-programmer atmega16u2 flash PAD.hex dfu-programmer atmega16u2 reset ``` Débranchez et rebranchez le port USB de la carte à nouveau. - Étape 4: Compilation du programme sur le PC Placez-vous dans le répertoire Pgm PC ``` cd ../../../Pgm\ PC/ ``` et compilez. ``` gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra ``` - Etape 5 : Vous pouvez lancer le programme en exécutant le fichier généré. ``` ./exe ``` ## II. Etat du programme - Ce qui fonctionne : Le programme de l'ATMega328P est fonctionnel. Lors d'un changement d'état des boutons ou d'un déplacement du joystick, il envoie à la suite un octet de début de trame, l'octet associé au boutons, la valeur de l'axe x du joystick et celle de l'axe y. Ces trois derniers octets sont mis en forme comme conseillé dans l'énoncé. La réclamation des interfaces se déroule sans accroc. La connexion entre l'ATMega16U2 et le PC par les points d'accès s'établit correctement. De plus, l'envoi des données sur la liaison série par l'ATMega328P fonctionne (testé avec minicom). - Ce qui ne fonctionne pas : Nous n'avons pas eu l'occasion de réaliser la commande des LED depuis l'exécutable du PC. La réception des données sur la liaison série de l'ATmega16U2, via la fonction Reception_Serie() n'est en effet pas opérationnelle. Une fois initialisés, les octets des boutons et des axes des joysticks, sont bien transmis au PC (et affichés sur le terminal) mais leur valeur ne change pas malgré les intéractions avec la manette. Il est possible que la commande des LED via le PC ne soit pas non plus fonctionnelle à cause du premier point abordé.