From 1f79b8eceb65df93c4677616979aae892b99888d Mon Sep 17 00:00:00 2001
From: "iliya.saroukha" <iliya.saroukhanian@etu.hesge.ch>
Date: Wed, 21 Jun 2023 10:35:12 +0200
Subject: [PATCH] added doc

---
 README.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 84 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b80368a..a40e971 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,94 @@
 # 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
 
 - ✅ Création du labyrinthe avec GIMP
 - ✅ Définition de la zone virtuelle de l'écran pour la bille
 - ✅ / 🚧 Documentation sur l'accéléromètre de la carte MyLab
 - ✅ 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
-- 🔴 Logique du jeu
+- ✅ Logique du jeu
 - 🥇 Travail sur les bonus
+
+
+
+
+
+
-- 
GitLab