VF PROJET A ENVOYER
This commit is contained in:
parent
0007c7e70b
commit
38722b033e
9 changed files with 122 additions and 42 deletions
|
|
@ -14,24 +14,13 @@ void MyBatterie_Init(void){
|
|||
MyADC_Init(ADC1,14); // Init ADC channel 14 pour convertir valeur
|
||||
MyADC_ActiveIT(ADC1,15,&handler_ADC); // Init interruption quand conversion finie
|
||||
|
||||
//My_USART_Init(USART1); // Init USART pour envoyer batterie
|
||||
|
||||
start_conversion(ADC1); // Premiere conversion
|
||||
}
|
||||
|
||||
void handler_ADC (void){
|
||||
//last2++;
|
||||
//if (tickms - last2 >= 2000) {
|
||||
//last2 = tickms;
|
||||
d = ADC1->DR &~ (0xF << 12); // Retourne valeur numérique
|
||||
d = d*3.3/4096;
|
||||
d = d*13*100/12;
|
||||
//send_USART_String(USART1,"Batterie : ");
|
||||
//send_USART(USART1,((int)d/10) + '0'); // Envoie le chiffre des dizaines
|
||||
//send_USART(USART1,((int)d%10) + '0'); // Envoie le chiffre des unités
|
||||
//send_USART_String(USART1,"%\n");
|
||||
//}
|
||||
//start_conversion(ADC1); // Recommence la conversion pour le prochain
|
||||
}
|
||||
|
||||
void Gestion_Conversion_ADC(void){
|
||||
|
|
|
|||
|
|
@ -3,9 +3,32 @@
|
|||
|
||||
#include <stm32f10x.h>
|
||||
|
||||
/**
|
||||
* @brief Initialise la batterie avec : initialisation de ADC1 et de son interruption, et lance la première conversion
|
||||
Configure l'IO
|
||||
- Réception de la batterie: In_Analog (GPIOC,4);
|
||||
* @param aucun
|
||||
*/
|
||||
void MyBatterie_Init(void);
|
||||
|
||||
/**
|
||||
* @brief Callback ADC12 : calcul le pourcentage de la batterie
|
||||
* @param aucun
|
||||
*/
|
||||
void handler_ADC(void);
|
||||
|
||||
/**
|
||||
* @brief Gestion du lancement de la conversion de l'ADC : lance une conversion toutes les Xms avec systick
|
||||
ATTENTION : initialisation requise du service systick préalable
|
||||
* @param aucun
|
||||
*/
|
||||
void Gestion_Conversion_ADC(void);
|
||||
|
||||
/**
|
||||
* @brief Retourne la valeur de la batterie
|
||||
* @param aucun
|
||||
* @sortie pourcentage de batterie
|
||||
*/
|
||||
int MyBatterie_val();
|
||||
|
||||
#endif
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
#include <USART.h>
|
||||
|
||||
void handler_USART1 (void) {
|
||||
//Pour le projet : Lancer PWM en fonction de la valeur du curseur
|
||||
// Lancement d'une PWM en fonction de la valeur reçue et du bit de sens
|
||||
char data = USART1->DR;
|
||||
char valabs;
|
||||
if (data & (1<<7)) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,20 @@
|
|||
#ifndef MYPLATEAU_H
|
||||
#define MYPLATEAU_H
|
||||
|
||||
/**
|
||||
* @brief Initialise le plateau avec : PWM a 20kHz sur Timer 3 channel 3, interruption UART1
|
||||
Configure les 2 IOs
|
||||
- Timer 3 channel 3: AltOut_Ppull (GPIOB,0);
|
||||
- Bit de sens : Out_Ppull (GPIOA,1);
|
||||
* @param aucun
|
||||
*/
|
||||
void Plateau_Init (void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Définition du callback de l'UART1 : Set la PWM et le bit de sens
|
||||
* @param : aucun
|
||||
*/
|
||||
void handler_USART1 (void);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,6 +1,10 @@
|
|||
#ifndef SYSTICK_H
|
||||
#define SYSTICK_H
|
||||
|
||||
/**
|
||||
* @brief Initialise le systick pour générer une interruption toutes les ms
|
||||
* @param aucun
|
||||
*/
|
||||
void MySystick_Init(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -8,19 +8,19 @@ uint32_t last3 = 0;
|
|||
uint32_t last4 = 0;
|
||||
|
||||
void Transmission_Init(void){
|
||||
My_USART_Init(USART1); //USART3
|
||||
My_USART_Init(USART1);
|
||||
}
|
||||
|
||||
void Transmission_allure(int angle_voiles){
|
||||
if (tickms-last1 >= 5000){
|
||||
last1 = tickms;
|
||||
if (angle_voiles < 23) send_USART_String(USART1,"Le bateau navigue vent debout. \n"); //USART3
|
||||
else if (angle_voiles < 27) send_USART_String(USART1,"Le bateau navigue au pres. \n"); //USART3
|
||||
else if (angle_voiles < 38) send_USART_String(USART1,"Le bateau navigue au pres bon plein. \n"); //USART3
|
||||
else if (angle_voiles < 53) send_USART_String(USART1,"Le bateau navigue au travers. \n"); //USART3
|
||||
else if (angle_voiles < 71) send_USART_String(USART1,"Le bateau navigue au grand large. \n"); //USART3
|
||||
else if (angle_voiles <= 90) send_USART_String(USART1,"Le bateau navigue vent arriere. \n"); //USART3
|
||||
else send_USART_String(USART1,"ERREUR DANS L'ANGLE!! \n"); //USART3
|
||||
if (angle_voiles < 23) send_USART_String(USART1,"Le bateau navigue vent debout. \n");
|
||||
else if (angle_voiles < 27) send_USART_String(USART1,"Le bateau navigue au pres. \n");
|
||||
else if (angle_voiles < 38) send_USART_String(USART1,"Le bateau navigue au pres bon plein. \n");
|
||||
else if (angle_voiles < 53) send_USART_String(USART1,"Le bateau navigue au travers. \n");
|
||||
else if (angle_voiles < 71) send_USART_String(USART1,"Le bateau navigue au grand large. \n");
|
||||
else if (angle_voiles <= 90) send_USART_String(USART1,"Le bateau navigue vent arriere. \n");
|
||||
else send_USART_String(USART1,"ERREUR DANS L'ANGLE!! \n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -28,14 +28,14 @@ void Transmission_batterie(int batterie){
|
|||
if (tickms-last3 >= 5000){
|
||||
last3 = tickms;
|
||||
if(batterie > 50){
|
||||
send_USART_String(USART1,"Batterie : "); //USART3
|
||||
send_USART_String(USART1,"Batterie : ");
|
||||
}
|
||||
else{
|
||||
send_USART_String(USART1, "SEUIL DE BATTERIE ATTEINT : "); //USART3
|
||||
send_USART_String(USART1, "SEUIL DE BATTERIE ATTEINT : ");
|
||||
}
|
||||
send_USART(USART1,(batterie/10) + '0'); // Envoie le chiffre des dizaines //USART3
|
||||
send_USART(USART1,(batterie%10) + '0'); // Envoie le chiffre des unités //USART3
|
||||
send_USART_String(USART1,"%\n"); //USART3
|
||||
send_USART(USART1,(batterie/10) + '0'); // Envoie le chiffre des dizaines
|
||||
send_USART(USART1,(batterie%10) + '0'); // Envoie le chiffre des unités
|
||||
send_USART_String(USART1,"%\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -44,22 +44,22 @@ void Transmission_roulis(char roulis){
|
|||
if (tickms-last4 >= 2000){
|
||||
last4 = tickms;
|
||||
if (roulis >= 40 && !(roulis & (1<<7))){
|
||||
send_USART_String(USART1, "ANGLE DE ROULIS TROP ELEVE : DEBORDAGE!!! \n"); //USART3
|
||||
send_USART(USART1,(roulis/10) + '0'); // Envoie le chiffre des dizaines //USART3
|
||||
send_USART(USART1,(roulis%10) + '0'); // Envoie le chiffre des unités //USART3
|
||||
send_USART_String(USART1, "ANGLE DE ROULIS TROP ELEVE : DEBORDAGE!!! \n");
|
||||
send_USART(USART1,(roulis/10) + '0'); // Envoie le chiffre des dizaines
|
||||
send_USART(USART1,(roulis%10) + '0'); // Envoie le chiffre des unités
|
||||
}
|
||||
else if (roulis & (1<<7)) {
|
||||
angabs = (1<<7) - (roulis & 0x7F);
|
||||
if (angabs >= 40) send_USART_String(USART1, "ANGLE DE ROULIS TROP ELEVE : DEBORDAGE!!! \n"); //USART3
|
||||
if (angabs >= 40) send_USART_String(USART1, "ANGLE DE ROULIS TROP ELEVE : DEBORDAGE!!! \n");
|
||||
else send_USART_String(USART1, "Angle de roulis : ");
|
||||
send_USART(USART1,(angabs/10) + '0');
|
||||
send_USART(USART1,(angabs%10) + '0');
|
||||
}
|
||||
else {
|
||||
send_USART_String(USART1, "Angle de roulis : "); //USART3
|
||||
send_USART(USART1,(roulis/10) + '0'); // Envoie le chiffre des dizaines //USART3
|
||||
send_USART(USART1,(roulis%10) + '0'); // Envoie le chiffre des unités //USART3
|
||||
send_USART_String(USART1, "Angle de roulis : ");
|
||||
send_USART(USART1,(roulis/10) + '0'); // Envoie le chiffre des dizaines
|
||||
send_USART(USART1,(roulis%10) + '0'); // Envoie le chiffre des unités
|
||||
}
|
||||
send_USART_String(USART1," degre(s)\n"); //USART3
|
||||
send_USART_String(USART1," degre(s)\n");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,34 @@
|
|||
#ifndef TRANSMISSION_H
|
||||
#define TRANSMISSION_H
|
||||
|
||||
/**
|
||||
* @brief Initialise la transmission sur UART1
|
||||
* @param aucun
|
||||
*/
|
||||
void Transmission_Init(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Permet de transmettre l'allure du voilier à la tablette, en fonction de l'angle de bordage des voiles, toutes les Xms
|
||||
ATTENTION : initialisation requise du service systick préalable
|
||||
* @param angle des voiles
|
||||
*/
|
||||
void Transmission_allure(int angle_voiles);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Permet de transmettre la batterie du voilier à la tablette, toutes les Xms
|
||||
ATTENTION : initialisation requise du service systick préalable
|
||||
* @param pourcentage de batterie
|
||||
*/
|
||||
void Transmission_batterie(int batterie);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Permet de transmettre l'angle de roulis à la tablette, toutes les Xms
|
||||
ATTENTION : initialisation requise du service systick préalable
|
||||
* @param angle de toulis en degrés
|
||||
*/
|
||||
void Transmission_roulis(char roulis);
|
||||
|
||||
#endif
|
||||
|
|
@ -2,10 +2,27 @@
|
|||
#define BORDAGE_H
|
||||
#include "stm32f10x.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief Initialise le bordage avec : PWM sur timer 1 channel 1 à 50Hz
|
||||
Configure l'IO
|
||||
- Timer 1 channel 1: AltOut_Ppull (GPIOA,8);
|
||||
* @param aucun
|
||||
*/
|
||||
void Init_bordage();
|
||||
|
||||
|
||||
/**
|
||||
* @brief Fait le bordage des voiles en fonction de l'angle de la girouette et de l'angle de roulis
|
||||
* @param Timer, channel utilisé (on pourrait enlever car ce n'est pas reconfigurable et laisser TIM1, channel 1 partout) et angle de roulis en degrés
|
||||
*/
|
||||
void Update_bordage (TIM_TypeDef *Timer, char channel, char roulis);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Calcule l'angle des voiles à partir de l'angle de la girouette
|
||||
* @param aucun
|
||||
*/
|
||||
int Calcul_Angle();
|
||||
|
||||
#endif
|
||||
|
|
@ -1,14 +1,23 @@
|
|||
#ifndef MYROULIS_H
|
||||
#define MYROULIS_H
|
||||
|
||||
/* Description des besoins au niveau service (ne pas oublier de gérer cs/NSS !!!)
|
||||
- Fonction d'init de l'accéléromètre
|
||||
- Fonction de calcul angle de roulis sur interruption externe GPIOA pin 6
|
||||
Ou sinon sur interruption d'un timer a 100HZ
|
||||
/**
|
||||
* @brief Initialise le roulis avec : initialisation de l'accéléromètre, interruption sur Timer 2 à 100Hz
|
||||
* @param aucun
|
||||
*/
|
||||
|
||||
void MyRoulis_Init(void);
|
||||
|
||||
/**
|
||||
* @brief callback du timer 3 : Récupère les données des axes y et z de l'accéléromètre
|
||||
* @param aucun
|
||||
*/
|
||||
void MyRoulis_Data(void);
|
||||
|
||||
/**
|
||||
* @brief Calcul la valeur de l'angle de roulis
|
||||
* @param aucun
|
||||
* @sortie angle de roulis en radiant
|
||||
*/
|
||||
float MyRoulis_Angle();
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue