Commit 04985598ec2472ca5c1e60e708ccbf29faeec796

Authored by root
1 parent dc90031e

Revert "Projer terminé"

This reverts commit dc90031e3bb71e8e2fffd640569db119a60812f9.
README.md deleted
@@ -1,102 +0,0 @@ @@ -1,102 +0,0 @@
1 -# Tutorat Système  
2 -  
3 -Etudiants: Raphaël MARTIN, Pierre FRISON.  
4 -  
5 -## nInvaders contrôlé par Arduino  
6 -  
7 -### Procédure automatique  
8 -  
9 -Pour simplifier la mise en place du programme de l'atmega328p et de l'atmega16u2, nous avons créer un script pour guider l'utilisateur dans les manipulations et exécuter les commandes à ça place.  
10 -  
11 -Lancez le script installAndPlay.sh à la racine du projet.  
12 -  
13 -Avec le shield orienté avec le joystick à gauche et les boutons à droite, les commandes sont les suivantes :  
14 - * Bouton gauche : déplacement à gauche  
15 - * Bouton haut : lancer une partie et tirer  
16 - * Bouton droit : déplacement à droite  
17 -  
18 -Amusez-vous bien ! (pour relancer le jeu sans installation utilisez play.sh)  
19 -  
20 -### Procédure manuelle  
21 -  
22 -Si notre script échoue voici la procédure manuelle :  
23 - * Court-circuitez le pin de reset de l'atmega16u2 à la masse  
24 - * cd atmega16u2/base/  
25 - * make  
26 - * Débranchez et rebranchez la carte Arduino  
27 - * cd atmega328p/  
28 - * make upload  
29 - * Court-circuitez le pin de reset de l'atmega16u2 à la masse  
30 - * cd atmega16u2/custom/PolytechLille/PAD/  
31 - * make upload  
32 - * Débranchez et rebranchez la carte Arduino  
33 - * cd ninvaders  
34 - * make exec  
35 - * Le jeu devrait se lancer  
36 -  
37 -## Tests préprogrammés  
38 -  
39 -Avec l'atmega328p et l'atmega16u2 programmé avec nos programmes, il est possible de réaliser différents tests à partir du PC. Il existe 4 programmes de test :  
40 - * ListDevices : retourne une liste de tous les appareils connectés avec des détails.  
41 - * ListEndpoints : cherche l'Arduino et affiche la liste des endpoints programmés avec quelques détails.  
42 - * SendData : cherche l'Arduino et envoi une séquence automatique via les endpoints pour faire clignoter des LEDs sur l'arduino.  
43 - * ReceiveAndSendData : cherche l'Arduino et se met en attente de données envoyé par la carte via l'endpoint dédié aux boutons. Lorsque l'utilisateur appui sur un bouton, les données sont réceptionnées et retourné sur l'endpoint des LEDs pour ordonner à l'Arduino leur allumage.  
44 -  
45 -## Détails et explications techniques  
46 -  
47 -### Modification de nInvaders  
48 -  
49 -Pour implémenter le contrôle par la carte Arduino, nous avons principalement modifié la fonction readInput. Nous avons choisi de lire les entrées par scrutation. Nous avons donc ajouté un timeout à la fonction getch pour le clavier et nous avons utiliser la fonction receiveData avec un timeout de 50 ms. De ce fait le jeu n'est pas bloqué.  
50 -  
51 -Il suffit ensuite de faire correspondre les données reçues avec des actions en jeu.  
52 -  
53 -### Pilote USB  
54 -  
55 -Pour simplifier l'utilisation du code, nous avons créé plusieurs fonctions clées :  
56 - * Une fonction "start" pour initialiser le librairie usb-1.0, chercher la carte Arduino grâce à ses IDs, réclamer les interfaces, détacher le kernel des interfaces et lister les endpoints dans un tableau.  
57 - * Une fonction "sendData" pour envoyer des données.  
58 - * Une fonction "receiveData" pour recevoir des données.  
59 - * Une fonction "stop" pour libérer les interfaces et supprimer les structures de données.  
60 -  
61 -Ce découpage s'inspire du fonctionnement des sockets (dans son utilisation uniquement, le fonctionnement étant évidemment différent).  
62 -  
63 -### atmega328p  
64 -  
65 -L'atmega328p nous sert ici pour acquérir la valeur des différents capteurs (boutons et joystick) et allumer les LEDs sur commande. Pour nous simplifier la tâche, nous avons utiliser un ordonnanceur et écrit 3 tâches :  
66 - * Pour l'affichage des LEDs  
67 - * Pour la lecture de la valeur des boutons  
68 - * Pour la lecture des axes du joystick  
69 -  
70 -### atmega16u2  
71 -  
72 -L'atmega16u2 sert uniquement de traducteur entre le PC et l'atmega328p. Il lit les informations transmises par le PC via les endpoint et le retransmet via liaison série et vis versa. (Voir "Conventions pour la communication" pour plus de détails sur les traductions).  
73 -  
74 -### Conventions pour la communication  
75 -  
76 -De 328p vers 16u2 : 0bXYZZZZZZ  
77 -* X = 0 -> les Z sont les états de chaque bouton  
78 -* X = 1 & Y = 0 -> les Z correspondent à la valeur X du joystick  
79 -* X = 1 & Y = 1 -> les Z correspondent à la valeur Y du joystick  
80 -  
81 -De 16u2 vers PC. Cas des boutons (Endpoint 0x83) : 0b00ZZZZZZ  
82 -* 2u2 -> PC (endpoint button 1) : 0b000ZZZZZ  
83 -* Z : état d'un bouton  
84 -  
85 -De 16u2 vers PC. Cas du joystick (Endpoint 0x84) : 0b1YZZZZZZ  
86 -* 12u2 -> PC (endpoint button 2) : 0bX0YYYYYY  
87 -* X = 0 -> valeur en X du joystick  
88 -* X = 1 -> valeur en Y du joystick  
89 -  
90 -De PC vers 16u2. Cas des LEDs 8 9 10 11 12 (Endpoint 0x01) : 0b000XXXXX  
91 -* X = état d'une LED (LEDs 8 9 10 11 12)  
92 -  
93 -De PC vers 16u2. Cas de la LED 13 (Endpoint 0x02) : 0b0000000X  
94 -* X = état de la LED 13  
95 -  
96 -De 16u2 vers 328p : 0b00YYYYYY  
97 -* Y = état d'une LED (LEDs 8 9 10 11 12 13)  
98 -  
99 -## Notes  
100 -  
101 -Les licences de certains programmes ont été supprimé pour gagner de la place (nInvaders notemment). Ce projet est à usage privé uniquement.  
102 -  
atmega328p/makefile renamed to atmega328p/Makefile
@@ -34,4 +34,4 @@ $(TARGET).hex: $(TARGET).elf @@ -34,4 +34,4 @@ $(TARGET).hex: $(TARGET).elf
34 upload: $(TARGET).hex 34 upload: $(TARGET).hex
35 stty -F $(TERM) hupcl # reset 35 stty -F $(TERM) hupcl # reset
36 $(DUDE) $(PGMERISP) -U flash:w:$(TARGET).hex 36 $(DUDE) $(PGMERISP) -U flash:w:$(TARGET).hex
37 - make clean 37 +
installAndPlay.sh deleted
@@ -1,31 +0,0 @@ @@ -1,31 +0,0 @@
1 -#!/bin/bash  
2 -  
3 -echo "Compilation et installation du programme dans l'atmega328p..."  
4 -  
5 -echo ""  
6 -echo "Courcircuitez le pin de reset de l'atmega16u2 à la masse."  
7 -read -n1 -s -r -p "Appuyez sur une touche pour continuer"  
8 -make -C ./atmega16u2/base/ || exit 1  
9 -  
10 -echo ""  
11 -echo "Débranchez et rebranchez la carte Arduino."  
12 -read -n1 -s -r -p "Appuyez sur une touche pour continuer"  
13 -make -C ./atmega328p/ upload || exit 1  
14 -  
15 -  
16 -echo ""  
17 -echo "Compilation et installation du programme dans l'atmega16u2..."  
18 -  
19 -echo ""  
20 -echo "Courcircuitez le pin de reset de l'atmega16u2 à la masse."  
21 -read -n1 -s -r -p "Appuyez sur une touche pour continuer"  
22 -make -C ./atmega16u2/custom/PolytechLille/PAD upload || exit 1  
23 -  
24 -echo ""  
25 -echo "Débranchez et rebranchez la carte Arduino."  
26 -read -n1 -s -r -p "Appuyez sur une touche pour continuer"  
27 -  
28 -  
29 -echo ""  
30 -echo "Compilation et lancement du jeu..."  
31 -make -C ./ninvaders/ exec || exit 1  
play.sh deleted
@@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
1 -#!/bin/bash  
2 -  
3 -echo "Compilation et lancement du jeu..."  
4 -make -C ./ninvaders/ exec || exit 1  
tests/SendData/a.out 0 → 100755
No preview for this file type