Skip to content
Snippets Groups Projects
Commit 1f79b8ec authored by iliya.saroukha's avatar iliya.saroukha :first_quarter_moon:
Browse files

added doc

parent 51cdbc94
No related branches found
No related tags found
No related merge requests found
# Projet semestriel du cours de programmation des microcontrôleurs # Projet semestriel du cours de programmation des microcontrôleurs
- [Projet semestriel du cours de programmation des microcontrôleurs](#projet-semestriel-du-cours-de-programmation-des-microcontrôleurs)
- [Résumé du projet](#résumé-du-projet)
- [L'idée initiale](#lidée-initiale)
- [Implémentation sur la carte](#implémentation-sur-la-carte)
- [Structure du projet](#structure-du-projet)
- [Conclusion](#conclusion)
- [Roadmap](#roadmap)
## Résumé du projet
Dans le cadre du projet semestriel en programmation des microcontrôleurs (PMC), j'ai décidé d'implémenter sur la carte `myLab2`, un labyrinthe interactif à l'aide de l'accéléromètre.
### L'idée initiale
Le principe du jeu est très simple et l'idée est basée sur un souvenir lointain de mon enfance. A la crèche nous avions un petit plateau recouvert par une vitre dans lequel il y'avait un labyrinthe et une bille. Il fallait tout simplement déplacer la bille d'un point de départ vers un point d'arrivée en inclinant/penchant le plateau dans toutes les directions possibles.
### Implémentation sur la carte
J'ai par conséquent décidé de tenter d'implémenter ce "souvenir" sur la carte `myLab2` afin d'avoir une version "_récente_" du jeu.
Mon jeu est basé sur les fonctionnalités suivantes:
- Récupération des données de l'accéléromètre
- Traitement des données afin de les rendre cohérentes par rapport à une valeur de calibrage de $\pm 2g$
- Fonctionnement correct de l'accéléromètre (mise à jour cohérente de la position de la bille en fonction de l'accélération sur les axes $x$ et $y$)
- Gestion du temps par interruption à l'aide du Systick Timer
- Affichage du temps écoulé sur les 8 petites LEDs
- Redémarrage du jeu par interruption sur le bouton A (interruption GPIO)
## Structure du projet
Sur l'affichage ci-dessous, le lecteur peut voir la manière dont j'ai structuré ce projet.
```
.
└── src
├── main.c
├── hdrs
│ ├── accel.h
│ ├── config_LPC1769.h
│ ├── font.h
│ ├── gpio.h
│ ├── init_clk.h
│ ├── lcd_spi.h
│ ├── logic.h
│ └── systick.h
└── impls
├── accel.c
├── font.c
├── gpio.c
├── init_clk.c
├── lcd_spi.c
├── logic.c
└── systick.c
```
- `main.c`
- C'est le fichier qui contiendra le point d'entrée du programme (c-à-d la fonction `int main(void)`). Cette fonction englobera la logique principal du jeu, en tous cas en ce qui concerne la mise à jour de la position de la bille en fonction des données récoltées par l'accéléromètre
- `/hdrs/*.h`
- Le dossier `/hdrs/` contiendra tous les entêtes de fichier nécéssaire pour les implémentations. Les divers fichiers dans ce dossier contiendront les prototypes des fonctions pour l'initialisation des divers parties du microcontrôleur ainsi que la manipulation de ceux-ci.
- `impls/*.c`
- Le dossier `/impls/` contiendra contiendra toutes les implémentations des fonctions déclarées dans les différents fichier d'entête.
- Un point central de mon projet était l'utilisation correcte de l'accéléromètre. Dans le fichier `accel.c`, le lecteur trouvera la fonction d'initialisation mais surtout la fonction de récupération des données `void get_raw_data(int16_t *raw_data, uint8_t len)` (la valeur de l'argument `len` devra être strictement égal à 3 car il n'y a que $3$ axes). Le tableau `*raw_data` sera un tableau de longueur $3$ qui sera populé par les valeurs d'accélération sur les axes $x$, $y$, $z$.
- La fonction `void get_float_data(float *float_data, int16_t *raw_data, uint8_t len)` s'occupera de populer le tableau `*float_data` avec les données stockées dans `*raw_data`. Le paramètre `len` devra aussi être strictement égal à $3$. Cette fonction convertira les données "brutes" vers des données décimales bornées entre $[-2g; +2g]$. Le calcul effectué est basé sur une macro `SCALE_FACTOR` dont la valeur correspond à $61[\mu g]$. Cette valeur est basé sur la valeur de calibrage choisie à l'initialisation de ce périphérique (dans notre cas le calibrage est de $\pm 2g$). En ayant choisi une valeur de calibrage, le `SCALE_FACTOR` peut-être calculé à l'aide du calcul ci-dessous
$$
\frac{val. calibrage}{MAXINT16} = SCALEFACTOR
$$
où la valeur maximale d'un entier sur 16 bits est égale à $32767$
## Conclusion
En conclusion, j'aimerai dire que j'ai su terminer ce projet et que l'implémentation et le travail en générale m'a beaucoup plu. Malheureusement la partie de l'accéléromètre m'a pris pas mal de temps sur la totalité du projet par conséquent je n'ai pas pu utiliser un second périphérique cependant le reste du projet correspond complètement au cahier des charges initial.
## Roadmap ## Roadmap
- ✅ Création du labyrinthe avec GIMP - ✅ Création du labyrinthe avec GIMP
- ✅ Définition de la zone virtuelle de l'écran pour la bille - ✅ Définition de la zone virtuelle de l'écran pour la bille
- ✅ / 🚧 Documentation sur l'accéléromètre de la carte MyLab - ✅ / 🚧 Documentation sur l'accéléromètre de la carte MyLab
- ✅ Récupération des données de l'accéléromètre - ✅ Récupération des données de l'accéléromètre
- 🔴 Calculs mathématiques sur l'orientation de la carte en - Calculs mathématiques sur l'orientation de la carte en
fonction des données récoltées fonction des données récoltées
- 🔴 Logique du jeu - Logique du jeu
- 🥇 Travail sur les bonus - 🥇 Travail sur les bonus
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment