diff --git a/MDK-ARM/Project.uvoptx b/MDK-ARM/Project.uvoptx
index 5cb1497..bb390b4 100644
--- a/MDK-ARM/Project.uvoptx
+++ b/MDK-ARM/Project.uvoptx
@@ -432,6 +432,54 @@
+
+ 3
+ 0
+ 35
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ ..\Src\Voilier.c
+
+
+
+
+ 4
+ 0
+ 36
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ ..\Src\Voilier.c
+
+
+
+
+ 5
+ 0
+ 81
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ ..\Src\Voilier.c
+
+
+
@@ -514,7 +562,7 @@
1
1
1
- 0
+ 1
0
0
..\Src\Voilier.c
@@ -582,7 +630,7 @@
2
6
1
- 0
+ 1
0
0
..\Src\Voile.c
diff --git a/Src/Allure.h b/Src/Allure.h
index 26c2f2b..7739a5f 100644
--- a/Src/Allure.h
+++ b/Src/Allure.h
@@ -1,6 +1,8 @@
#ifndef ALLURE_H
#define ALLURE_H
+/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL */
+
/**
* @brief Configure la girouette pour la détection de l'allure (sens du vent).
* @note Configuration des ports PA6 et 7 en alternate input pour récupérer les signaux
diff --git a/Src/Gouvernail.h b/Src/Gouvernail.h
index 3e4bbee..dc7605c 100644
--- a/Src/Gouvernail.h
+++ b/Src/Gouvernail.h
@@ -1,6 +1,9 @@
#ifndef GOUVERNAIL_H
#define GOUVERNAIL_H
+/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL, ELISE */
+
+
/**
* @brief Configure le récepteur de la télécommande ainsi que le plateau rotatif.
* @note Configuration du port PB6 et 7 en alternate input pour récupérer les signaux de la télécommande
diff --git a/Src/Securite.c b/Src/Securite.c
index 1786393..6ee8a42 100644
--- a/Src/Securite.c
+++ b/Src/Securite.c
@@ -75,12 +75,6 @@ void ConfSecurite(){
LL_ADC_Enable(ADC1);
}
-/**
- * @brief Recuperer le niveau de batterie
- * @note ADC1 -> Channel 12 (Rang 2)
- * @param None
- * @retval niveau de batterie en pourcentage
- */
int RecupNiveauBatterie(void){
// Lancement de la conversion
LL_ADC_INJ_StartConversionSWStart(ADC1);
@@ -93,12 +87,6 @@ int RecupNiveauBatterie(void){
}
-/**
- * @brief Met le flag de dangerBatterie à 1 si batterie faible.
- * @note
- * @param un entier representant le niveau de batterie en pourcentage
- * @retval
- */
int CalculerDangerNiveauBatterie(int niveau){
if ( niveau <= Seuil)
{
@@ -111,12 +99,6 @@ int CalculerDangerNiveauBatterie(int niveau){
}
- /*
- * @brief Mets le flag drapeauDangerRouli a 1 si l angle de rouli est mauvais
- * @note Si le voilier prend un angle de roulis supe´rieur a` 40° -> MSG de danger + voiles sont imme´diatement rela^che´es
- * @param un entier representant l angle de rouli
- * @retval NONE
- */
int CalculerDangerChavirement(int gamma){
if ( gamma >= SeuilAngle)
{
@@ -128,12 +110,6 @@ int CalculerDangerChavirement(int gamma){
}
}
-/*
- * @brief Recuperer l angle de rouli
- * @note ADC1 -> Channel 10 (Rang 1)
- * @param None
- * @retval angle de rouli
- */
int RecupRouli(){
// Lancement de la conversion
LL_ADC_INJ_StartConversionSWStart(ADC1);
diff --git a/Src/Securite.h b/Src/Securite.h
index f90a498..81921ab 100644
--- a/Src/Securite.h
+++ b/Src/Securite.h
@@ -1,44 +1,49 @@
#ifndef SECURITE_H
#define SECURITE_H
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
+/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : ELIES, AURIANE, ELISE */
+
+
+ /**
+ * @brief Mets le flag drapeauDangerRouli a 1 si l angle de roulis est mauvais
+ * @note Si le voilier prend un angle de roulis supérieur à 40° -> MSG de danger + voiles sont immédiatement relâchées
+ * @param un entier representant l angle de roulis (entre 0 et 90 degrés)
+ * @retval NONE
+ */
int CalculerDangerChavirement(int gamma);
+
/**
- * @brief
- * @note
- * @param
- * @retval
+ * @brief Recuperer l angle de rouli
+ * @note ADC1 -> Channel 10 (Rang 1)
+ * @param None
+ * @retval angle de rouli (entre 0 et 90 degrès)
*/
int RecupRouli(void);
/**
- * @brief
- * @note
- * @param
- * @retval
+ * @brief Recuperer le niveau de batterie
+ * @note ADC1 -> Channel 12 (Rang 2)
+ * @param None
+ * @retval niveau de batterie en pourcentage (entre 0 et 100)
*/
int RecupNiveauBatterie(void);
+
/**
- * @brief
- * @note A lancer en 1er avant tout
- * @param
- * @retval
+ * @brief Configuration de l'ADC 1 pour l'acceleromètre et le niveau de batterie
+ * @note Channels 10 et 12. A lancer en 1er
+ * @param None
+ * @retval None
*/
void ConfSecurite(void);
/**
- * @brief
- * @note
- * @param
- * @retval
+ * @brief Met le flag de dangerBatterie à 1 si batterie faible.
+ * @note
+ * @param un entier representant le niveau de batterie en pourcentage
+ * @retval 1 si danger, 0 si pas de danger
*/
int CalculerDangerNiveauBatterie(int niveau);
diff --git a/Src/Transmission.h b/Src/Transmission.h
index 9b47f57..f1f2f84 100644
--- a/Src/Transmission.h
+++ b/Src/Transmission.h
@@ -1,12 +1,42 @@
#ifndef TRANSMISSION_H
#define TRANSMISSION_H
+
+/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL, ELIES, AURIANE */
+
+
+/**
+ * @brief Initialiser la structure de transmission avec les chaines de caractères pour l'envoi régulier
+ * @note Flag d'envoi mis à 1 à la fin pour activer la transmission dans EnvoyerCaractere
+ * @param 2 chaines de caractères pour l'allure et la tension des voiles
+ * @retval None
+ */
void EnvoiRegulier(char * Allure, char * tension);
+/**
+ * @brief Initialiser la structure de transmission avec les chaines de caractères pour l'envoi excptionnel
+ * @note Flag d'envoi mis à 1 à la fin pour activer la transmission dans EnvoyerCaractere
+ Envoi excpetionnel peut être un message d'alerte pour la batterie ou le roulis
+ * @param A chaine de caractère pour indiquer quel danger est mis en avant
+ * @retval None
+ */
void EnvoiExceptionnel(char * msgAlarme);
+/**
+ * @brief Appelée en BG dans le while(1). Si le flag d'envoi est à 1, envoi le prochain caractère contenu dans la
+ structure transmission
+ * @note
+ * @param None
+ * @retval None
+ */
void EnvoyerCaractere(void);
+/**
+ * @brief Configuration de l'USART pour les transmissions
+ * @note None
+ * @param None
+ * @retval None
+ */
void ConfTransmission(void);
#endif
diff --git a/Src/Voile.c b/Src/Voile.c
index d03c2ec..0e779fe 100644
--- a/Src/Voile.c
+++ b/Src/Voile.c
@@ -15,21 +15,35 @@
#define A_BETA_TO_GAMMA ((GAMMA_90 - GAMMA_0)/90.0) //Coefficient directeur de la relation entre l'angle de voile et la PWM
#define B_BETA_TO_GAMMA (GAMMA_0) //Ordonnée a l'origine
+//Valeurs de CCR1 pour la PWM output
+#define POSITION_00 1000
+#define POSITION_10 1100
+#define POSITION_20 1200
+#define POSITION_30 1300
+#define POSITION_40 1400
+#define POSITION_50 1500
+#define POSITION_60 1600
+#define POSITION_70 1700
+#define POSITION_80 1800
+#define POSITION_90 1900
+
+
int angleVoileActuel = 0; //angle de la voile. Mis à jour quans on la tend. de 0 à 45.
-void ConfVoile(void){
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
- LL_TIM_SetAutoReload(Timer, ARR);
- LL_TIM_SetPrescaler(Timer, PSC);
- LL_GPIO_SetPinMode(GPIOA,LL_GPIO_PIN_8,LL_GPIO_MODE_ALTERNATE);
- LL_GPIO_SetPinOutputType(GPIOA,LL_GPIO_PIN_8,LL_GPIO_OUTPUT_PUSHPULL);
- LL_TIM_OC_SetMode(Timer, channel, LL_TIM_OCMODE_PWM1);
- Timer->CCER |= TIM_CCER_CC1E;
- Timer->BDTR |= 0x1 << 15;
- Timer->CCR1 = 1500; // par defaut tendu à 1ms
- LL_TIM_EnableCounter(Timer);
-}
+
+void ConfVoile(void){
+ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); //Enable l'horloge du GPIOA
+ LL_TIM_SetAutoReload(Timer, ARR); //On règle l'ARR
+ LL_TIM_SetPrescaler(Timer, PSC); //On règle le PSC
+ LL_GPIO_SetPinMode(GPIOA,LL_GPIO_PIN_8,LL_GPIO_MODE_ALTERNATE); //Pin en mode output alternate
+ LL_GPIO_SetPinOutputType(GPIOA,LL_GPIO_PIN_8,LL_GPIO_OUTPUT_PUSHPULL); //Pin en mode output pushpull
+ LL_TIM_OC_SetMode(Timer, channel, LL_TIM_OCMODE_PWM1); //On met le timer en mode PWM1 sur le channel choisi
+ Timer->CCER |= TIM_CCER_CC1E; //On enable le comptage dans le timer en output
+ Timer->BDTR |= 0x1 << 15; //Comme on utilise le Timer1, on met le bit MOE à 1
+ Timer->CCR1 = 1500; // par defaut tendu à 1ms
+ LL_TIM_EnableCounter(Timer); //On commence le comptage
+}
int RecupTensionVoile(void){
@@ -49,7 +63,49 @@ int CalculerTension(int alpha){
void TendreVoile(int theta)
{
- Timer->CCR1 = (int)(A_BETA_TO_GAMMA * (float)theta + B_BETA_TO_GAMMA) ;
+ if (theta < 5){
+ Timer->CCR1 = POSITION_00;
+ angleVoileActuel = 0;
+ }
+ if (theta < 10){
+ Timer->CCR1 = POSITION_10;
+ angleVoileActuel = 10;
+ }
+ else if(theta < 20){
+ Timer->CCR1 = POSITION_20;
+ angleVoileActuel = 20;
+ }
+ else if(theta < 30){
+ Timer->CCR1 = POSITION_30;
+ angleVoileActuel = 30;
+ }
+ else if(theta < 40){
+ Timer->CCR1 = POSITION_40;
+ angleVoileActuel = 40;
+ }
+ else if(theta < 50){
+ Timer->CCR1 = POSITION_50;
+ angleVoileActuel = 50;
+ }
+ else if(theta < 60){
+ Timer->CCR1 = POSITION_60;
+ angleVoileActuel = 60;
+ }
+ else if(theta < 70){
+ Timer->CCR1 = POSITION_70;
+ angleVoileActuel = 70;
+ }
+ else if(theta < 80){
+ Timer->CCR1 = POSITION_80;
+ angleVoileActuel = 80;
+ }
+ else{
+ Timer->CCR1 = POSITION_90;
+ angleVoileActuel = 90;
+ }
+
+
+ //Timer->CCR1 = (int)(A_BETA_TO_GAMMA * (float)theta + B_BETA_TO_GAMMA) ;
}
char * TensionVoileToString(int theta) {
diff --git a/Src/Voile.h b/Src/Voile.h
index 1e05d15..87d5ce2 100644
--- a/Src/Voile.h
+++ b/Src/Voile.h
@@ -1,18 +1,51 @@
#ifndef VOILE_H
#define VOILE_H
+/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : ELIES, AURIANE */
+
+/* RESOLUTION PWM SERVOMOTEUR : 10 POSITIONS POSSIBLES*/
+
+ /**
+ * @brief Configuration du Timer en mode PWM output
+ * @note Timer1 en thérie
+ * @param
+ * @retval None
+ */
void ConfVoile(void);
-
-char * ToString(int theta) ;
-
-
+ /**
+ * @brief Retourne la valeur de l'angle de la voile actuel en degrés
+ * @note
+ * @param
+ * @retval Un angle compris entre 5 et 90 (en degrés) (10 valeurs possibles entre dans [5,10,20,30,40,50,60,70,80,90]
+ */
int RecupTensionVoile(void);
+
+ /**
+ * @brief Calcule à partir de l'angle alpha (allure), l'angle theta (de la voile) à avoir
+ * @note Si alpha < 45, on détend la voile (theta = 90)
+ * @param Un entier alpha compris entre 0 et 180
+ * @retval Un angle theta compris entre 0 et 90 degrés (en degrés)
+ */
int CalculerTension(int alpha);
+
+ /**
+ * @brief Met à jour le registre CCR1 pour tendre la voile selon theta
+ * @note 10 niveaus possibles pour la résolution PWM.
+ * @param Un entier theta entre 0 et 90
+ * @retval None
+ */
void TendreVoile(int theta);
+
+/**
+ * @brief Associe un chaine de caractère a une valeur d'angle de voile
+ * @note
+ * @param theta : un entier entre 10 valeurs possibles [5,10,20,30,40,50,60,70,80,90]
+ * @retval Une chaine de caractère représentant l'angle de voile
+ */
char * TensionVoileToString(int theta);
#endif
diff --git a/Src/Voilier.c b/Src/Voilier.c
index 4994abf..00410b4 100644
--- a/Src/Voilier.c
+++ b/Src/Voilier.c
@@ -9,6 +9,10 @@
#include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config
#include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config
+
+/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL, ELIES, AURIANE, ELIES */
+
+
void SystemClock_Config(void);
void ConfSysTick(void){
@@ -53,7 +57,7 @@ void Envoi3s(){
*/
void Task100ms(){
- int dangerRoulis = 0; //Variable qui permet de ne pas tendre les voiles si il y a trop de roulis
+ int dangerRoulis = 0; //Variable qui permet de ne pas tendre les voiles si il y a trop de roulis
//Anti-Chavirement
if(CalculerDangerChavirement(RecupRouli())){//renvoi boolean : int à 0 si faux et 1 si vrai