Raphael_lacroix-Aurelia_lej.../PjtKEIL_Integration/Src/principal.c
2022-05-10 16:58:35 +02:00

116 lines
2.6 KiB
C

#include "DriverJeuLaser.h"
#include "GestionSon.h"
#include "Affichage_Valise.h"
#define BASE_TIMEOUT 100
#define NB_JOUEUR 4
#define SEUIL 0x3c1f1*3
/* on augmente le seuil pour eviter que le score des autres joueurs augmente lorsqu'un joueur touche la cible.
Après test, cette valeur permet de n'avoir aucun faux positifs et aucun faux negatifs */
extern int DFT_ModuleAuCarre(short int * LeSignal, int k);
extern short int LeSignal[];
// structure représentant un joueur
struct joueur {
int k; // le "k" associé à sa DFT
int score; // son score
int timeout; // utilisé pour ne pas compter plusieur fois la même salve
int dft;
};
struct joueur tabJoueur[6];
// correspond à quelle valeur de k pour notre joueur i
int valK [6] = {17,18,19,20,23,24};
int tab[64];
short int dma_buf[64];
void fTick(){
// Démarrage de la DMA
Start_DMA1(64);
// Attente de la fin de DMA
Wait_On_End_Of_DMA1();
// Arrêter la DMA
Stop_DMA1;
for (int k=0; k < NB_JOUEUR; k++){
// on calcule la DFT uniquement si le joueur n'est pas en timeout
if (tabJoueur[k].timeout == 0){
tabJoueur[k].dft = DFT_ModuleAuCarre((short *) &dma_buf[0], tabJoueur[k].k);
// si la DFT est au dessus d'un certain seuil on augmente le score et on lance le timeout
if (tabJoueur[k].dft >= SEUIL){
tabJoueur[k].score ++;
tabJoueur[k].timeout = BASE_TIMEOUT;
/* TEMPORAIRE : il faudra par la suite gérer les affichages */
StartSon();
}
}
else { // si le joueur est en timeout on décrémente sa valeur de timeout
tabJoueur[k].timeout--;
}
}
}
int main(void)
{
// ===========================================================================
// ============= INIT PERIPH (faites qu'une seule fois) =====================
// ===========================================================================
//inititialisation des structures
for(int i = 0; i < 6; i++){
tabJoueur[i].score = 0;
tabJoueur[i].timeout = 0;
tabJoueur[i].dft = 0;
tabJoueur[i].k = valK[i];
}
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure();
Systick_Period_ff( 360000 ); // 5ms pour une clock a 72 MhHz
Systick_Prio_IT(1, fTick);
// Gestion de la DMA
Init_TimingADC_ActiveADC_ff( ADC1, 72 );
Single_Channel_ADC( ADC1, 2 );
Init_Conversion_On_Trig_Timer_ff( ADC1, TIM2_CC2, 225 );
Init_ADC1_DMA1( 0, dma_buf );
// Gestion des sons
GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL);
Timer_1234_Init_ff(TIM4,6552);
Active_IT_Debordement_Timer(TIM4, 2,CallbackSon);
PWM_Init_ff(TIM3, 3, 720);
SysTick_On;
SysTick_Enable_IT;
while (1)
{
}
}