53 lines
1.6 KiB
C
53 lines
1.6 KiB
C
#include <stm32f10x.h>
|
|
#include <stdio.h> // Pour afficher
|
|
#include "Horloge.h"
|
|
#include "Accelerometre.h"
|
|
#include "Girouette.h"
|
|
#include "Servo.h"
|
|
#include "I2C.h"
|
|
#include "MyUart.h"
|
|
#include "Plateau.h"
|
|
|
|
//Variables
|
|
int angleVentVar;
|
|
int angleVoileVar;
|
|
uint16_t moyenne[LONGUEUR_MOY];
|
|
uint32_t sum;
|
|
//uint16_t i;
|
|
volatile uint32_t moy; // Volatile pour pouvoir le regarder dans Keil µVision
|
|
|
|
|
|
int main(void) {
|
|
// ---- Setup ------
|
|
// Servo.c
|
|
initServo(TIM4, 3);
|
|
// Giroutte.c
|
|
configEncoder(TIM2);
|
|
|
|
// Initialisation des modules
|
|
initAccelo();
|
|
initLacheur();
|
|
|
|
//RTC
|
|
initRTC();
|
|
getTime();
|
|
|
|
for (int p = 0; p<LONGUEUR_MOY; p++){moyenne[p]=0xFFFF;} // Initialisation du tableau à 0xFFFF, pour ne pas qu'il se déclenche immediatement
|
|
|
|
LocaliserZero();
|
|
int i = 0;
|
|
|
|
// ----- Opération -----
|
|
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
|
|
}
|
|
};
|