diff --git a/Pgm PC/init_USB.c b/Pgm PC/init_USB.c index d2fdc76..4bbf169 100644 --- a/Pgm PC/init_USB.c +++ b/Pgm PC/init_USB.c @@ -232,7 +232,7 @@ int main(){ receive_data(tab_PA, &boutons, &joystick_x, &joystick_y); //Réception des boutons et joystick //printf("fin rcpt\n"); printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%02x\n", boutons, joystick_x, joystick_y); //Affichage si changement - if ((boutons != boutons_anc) || (joystick_x != joystick_x_anc) || (joystick_y != joystick_y_anc)) printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%c\n", boutons, joystick_x, joystick_y); //Affichage si changement + //if ((boutons != boutons_anc) || (joystick_x != joystick_x_anc) || (joystick_y != joystick_y_anc)) printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%c\n", boutons, joystick_x, joystick_y); //Affichage si changement boutons_anc = boutons; joystick_x_anc = joystick_x; diff --git a/README.md b/README.md index fdd940a..45fbdd6 100644 --- a/README.md +++ b/README.md @@ -2,83 +2,105 @@ READ ME Tutorat système -Rémy Guillomon // Guillaume Cremaschi +Rémi Guillomon // Guillaume Cremaschi -Objectif : Créer une manette avec une carte Arduino relier en connexion USB avec un PC. +Objectif : Utiliser un shield Arduino de jeu et assurer la liaison USB à un PC. -Pour compiler, lancer et ultiliser les programmes : +I. Compilations et exécution +Les compilations et l'exécution se déroulent en plusieurs étapes. -Étape 1: Vérifier que la carte ne soit pas flashée. +- Étape 1: Vérifiez que la carte ne soit pas flashée. -\>lsusb +`lsusb` -On doit voir une ligne "Arduino SA Uno (CDC ACM)" apparaître. -Si elle est déjà flashée, il faut enregistrer le binaire du lien : https://raw.githubusercontent.com/arduino/ArduinoCore-avr/master/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex +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-circuiter les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur +Court-circuitez les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur -Puis écrire : +Puis écrivez dans un terminal : +``` +\> dfu-programmer atmega16u2 erase +\> dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex +\> dfu-programmer atmega16u2 reset +``` -\>dfu-programmer atmega16u2 erase +Débranchez et rebranchez le port USB de la carte. -\>dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex +- Étape 2 : Compilation et chargement du programme main.c dans l'ATMega328P -\>dfu-programmer atmega16u2 reset +Dans un terminal, entrez ces commandes. +``` +make all +make upload +``` +Passez en root pour l'upload si nécessaire. -Débrancher et rebrancher le port USB de la carte. +Vous pouvez tester ce progrmme directement avec la commande -Étape 2 : +`minicom -8 -o -b 9600 -D /dev/ttyACM0` -Compiler et Upload le programme main.c sur l'arduino. -\>make all +- Étape 3: Flasher l'ATMega16U2 avec le programme de la partie 3 -\>make upload +Entrez dans le répertoire suivant et compilez +``` +cd lufa-master/PolytechLille/PAD/ +make all +``` -Passer en root pour l'upload si nécessaire. +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 -Remarque : Nous pouvons tester ce progrmme directement avec : +``` +dfu-programmer atmega16u2 erase +dfu-programmer atmega16u2 flash PAD.hex +dfu-programmer atmega16u2 reset +``` -\>minicom -8 -o -b 9600 -D /dev/ttyACM0 +Débranchez et rebranchez le port USB de la carte à nouveau. +- Étape 4: Compilation du programme sur le PC -Le programme est maintenant sur l'Arduino. +Placez-vous dans le répertoire Pgm PC +`cd ../../../Pgm\ PC/` -Étape 3: -Flasher la carte +et compilez. -\>cd lufa-master/PolytechLille/PAD/ +`gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra` -\>make all +- Etape 5 : -Court-circuiter les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur +Vous pouvez lancer le programme en exécutant le fichier généré. +` +./exe +` -\>dfu-programmer atmega16u2 erase +II. Etat du programme -\>dfu-programmer atmega16u2 flash PAD.hex +- Ce qui fonctionne : -\>dfu-programmer atmega16u2 reset + 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é. -Débrancher et rebrancher le port USB de la carte. + La réclamation des interfaces se déroule sans accroc. -Étape 4: -Compiler la partie 1 et l'exécuter. + 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). -\>cd ../../../Pgm\ PC/ +- 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é. -\>gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra -\>./exe -Ce qui marche : -_ La Partie 2, fonctionne correctement et compile sans warnings. -Ce qui ne marche pas : (La partie 3 marche-t-elle ?) diff --git a/main.c b/main.c index e20263e..74b14eb 100644 --- a/main.c +++ b/main.c @@ -80,20 +80,20 @@ void commande_leds(){ if (temp_serial !=0){ leds = temp_serial; // Allumer LED de 'A' à 'F' - if (leds == 65) PORTB = PORTB | 0x01; - if (leds == 66) PORTB = PORTB | 0x02; - if (leds == 67) PORTB = PORTB | 0x04; - if (leds == 68) PORTB = PORTB | 0x08; - if (leds == 69) PORTB = PORTB | 0x10; - if (leds == 70) PORTB = PORTB | 0x20; + if (leds == 'A') PORTB = PORTB | 0x01; + if (leds == 'B') PORTB = PORTB | 0x02; + if (leds == 'C') PORTB = PORTB | 0x04; + if (leds == 'D') PORTB = PORTB | 0x08; + if (leds == 'E') PORTB = PORTB | 0x10; + if (leds == 'F') PORTB = PORTB | 0x20; // Eteindre LED de 'a' à 'f' - if (leds == 97) PORTB = PORTB & 0xfe; - if (leds == 98) PORTB = PORTB & 0xfd; - if (leds == 99) PORTB = PORTB & 0xfb; - if (leds == 100) PORTB = PORTB & 0xf7; - if (leds == 101) PORTB = PORTB & 0xef; - if (leds == 102) PORTB = PORTB & 0xdf; + if (leds == 'a') PORTB = PORTB & 0xfe; + if (leds == 'b') PORTB = PORTB & 0xfd; + if (leds == 'c') PORTB = PORTB & 0xfb; + if (leds == 'd') PORTB = PORTB & 0xf7; + if (leds == 'e') PORTB = PORTB & 0xef; + if (leds == 'f') PORTB = PORTB & 0xdf; } } @@ -174,15 +174,3 @@ int main(void){ } return 0; } - - - - - - - - - - - - -- libgit2 0.21.2