39 lines
1.5 KiB
C
39 lines
1.5 KiB
C
#include <stm32f10x.h>
|
|
#include <Horloge.h>
|
|
#include <MYGPIO.h>
|
|
#include <MySPI.h>
|
|
#include <Accelerometre.h>
|
|
#include <stdio.h>
|
|
#include <Servo.h>
|
|
|
|
#define MODE_AVANCEE 1 // Mettre 1 si on souhaite choisir l'angle de declenchement de la sécurité de bateau penché, sinon mettre 0 pour mode simple (40 degrés) SE MODIFIE
|
|
#if MODE_AVANCEE
|
|
#define ANGLE 60 // Angle ou les voiles seront lachés, SE MODIFIE
|
|
#define ANGLE_LIMITE = 0x1E20 - 60*ANGLE // Calcul d'une valeur approximée (linéaire au lieu de sinusoidale) de l'angle en hexadécimal
|
|
#else
|
|
#define ANGLE_LIMITE = 0x1500 // Valeur approximée pour 40 degrés
|
|
#endif
|
|
|
|
volatile uint32_t moy; // Volatile pour pouvoir le regarder dans Keil µVision
|
|
uint16_t moyenne[LONGUEUR_MOY];
|
|
uint32_t sum;
|
|
uint16_t i;
|
|
|
|
int main (void) {
|
|
for (int p = 0; p<LONGUEUR_MOY; p++){moyenne[p]=0xFFFF;} // Initialisation du tableau à 0xFFFF, pour ne pas déclencher immediatement
|
|
|
|
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // Activation de l'horloge
|
|
|
|
// Initialisation des modules
|
|
initAccelo();
|
|
initLacheur();
|
|
initServo(TIM4, 3);
|
|
|
|
while(1){
|
|
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
|
|
}
|
|
|