5 Janvier 2016
Pour notre projet, nous avons décidé d'implémenter le jeu "pierre papier ciseau" . Pour cela, nous devons utiliser l’accéléromètre.
La communication avec l’accéléromètre se fait via le protocole i2c.
 partir de ce TP, nous travaillons chaque séance avec pour objectif de réaliser notre application. Je vais donc expliquer tout ce qu'il nous restait à faire sur ce rapport.
Pour pouvoir compiler des fonctions i2c, il faut ajouter dans le fichier de configuration dans targets/mbed_ethernet/rflpc-config-file/config-options.h
L’accéléromètre ne peut être programmé que s'il est en mode stand by, donc il faut commencer par le mettre en stand by, pour pourvoir réinitialiser le registre sr.
Pour le protocole i2c, nous utilisons les fonctions définies dans smews. On communique avec le registre 0x98 de l'application board.
Pour mettre l’accéléromètre en stand by il faut mettre un 0 dans le registre 7 de l’accéléromètre, et pour l'activer mettre 1 dans le même registre.
Pour initialiser le registre sr il faut mettre 0 dans le registre 8.
Pour écrire dans les registres de l’accéléromètre nous déclarons un uint8_t in[2]; on met le numéro de registre dans in[0] et la valeur que nous voulons y mettre dans in[1];
Et nous utilisons la fonction rflpc_i2c_write(RFLPC_I2C_PORT,0x98,in,taille_de_la_donée,stop);
ou : RFLPC_I2C_PORT désigne les pins du sdl et sda, et on met le stop à 1 car 0 ne marche pas.
Pour récupérer les données de l'accelerometre il suffit de mettre un 0 dans le registre 0, et de lire le registre 0x98 qui va nous retourner une donnée sur 4octets.
pour récuperer la donnée nous utilisons une variable uint8_t data[4]
On trouvera :
* x dans data[0]
* y dans data[1]
* z dans data[2]
* tilt dans data[3]
Pour notre projet nous n'aurons besoin que de la variable tilt dont la structure est la suivante:
Shake | Alert | Tap | PoLa[2] | PoLa[1] | PoLa[0] | BaFro[1] | BaFro[0]
Le bit de 7 est à 1 si l'application board est secouée assez fort pour faire un shake
Les bits PoLa[2] | PoLa[1] | PoLa[0] signifient:
000: Unknown condition of up or down or left or right
001: Left:Equipment is in landscape mode to the left
010: Right:Equipment is in landscape mode to the right
101: Down:Equipment standing vertically in inverted orientation
110: Up:Equipment standing vertically in normal orientation
Nous faisons donc un décalage à droite de 2 bits sur la variable tilt suivi d'un & 7 pour mettre toutes les autres cases autres que PoLa à 0.
Pour le jeu,nous avons écrit une fonction js qui va récupérer 3 shakes, puis récupèrer la valeur de pola pour connaitre le choix de l'utilisateur.
Nous faisons ensuite un tirage aléatoire pour l'ordinateur, et affichons si le joueur a gagné ou perdu.