BE_VOILIER/ProjetInitial/Application/principal.c
2025-12-17 00:11:41 +01:00

89 lines
2.2 KiB
C
Executable file

#include <stm32f10x.h>
#include <stdio.h> // Pour afficher
#include "Horloge.h"
#include "Accelerometre.h"
#include "Girouette.h"
#include "Servo.h"
#include "MyUart.h"
#include "Plateau.h"
#include "I2C.h"
#include "RTC.h"
void pilotage(int commande) {
Update_Motor_PWM(commande,TIM3,3);
};
//#define ANGLE_LIMITE 0x0E38
//Variables
int angleVentVar;
int angleVoileVar;
uint16_t * Melding;
volatile uint16_t X;
volatile uint16_t Y;
volatile uint16_t Z;
volatile uint32_t moy;
//volatile uint16_t Angle_lim = 0x1500;
//volatile uint16_t Angle_lim = 0x1E20 - 60*ANGLE;
int main (void) {
// ---- Setup ------
// Servo.c
initServo(TIM4, 3);
// Giroutte.c
configEncoder(TIM2);
/*
//Test de lecture ADC
My_USART_Config(USART1, 7500);
initADC();
while(1){
sendinfoADC();
}
*/
// Init moyenne glissante
int i = 0;
uint32_t moyenne[LONGUEUR_MOY];
for (int p = 0; p<LONGUEUR_MOY; p++){moyenne[p]=0xFFFF;}
//init Uart
My_USART_Config(USART1, 7500); //call with baudrate which is one over this value times clock frequency
USART_IT_Receive_Enable(USART1);
Init_IT_Receive(pilotage);
USART_Send_String(USART1,"bonjour bateau\r\n");
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
// Init lacheurVoile
initAccelo();
initServo(TIM4, 3);
// Trouver l'index
LocaliserZero();
int sum;
while(1){
// Girouette
angleVentVar = angleVent(TIM2); // Récupérer l'angle de girouette
angleVoileVar = vent2voile(angleVentVar); // Transformer l'angle de girouette au l'angle des voiles souhaités
Servo_Moteur(angleVoileVar, TIM4, 3); // Faire bouger le moteur servo
// Acceleromètre
moyenne[i] = RecupAccelo()[2]; // Récuperation et ajout de la valeur plus récente dans le tableau dans la position i
i++; if (i >= LONGUEUR_MOY) {i = 0;} // Géstion de la position i dans le tableau pour la moyenne glissante
sum = 0; for (int j = 0; j < LONGUEUR_MOY; j++){sum += moyenne[j];} moy = sum / LONGUEUR_MOY; // Calcul de la moyenne glissante
LacheVoile(ANGLE_LIMITE, (uint16_t) moy); // Lache la voile si le bateau dépasse l'angle limite
LacheVoile(50, (uint16_t)moy);
}
}