Raphael_lacroix-Aurelia_lej.../PjtKEIL_Integration/Src/principal.c
2022-05-10 15:41:44 +02:00

104 lines
2.2 KiB
C

#include "DriverJeuLaser.h"
#include "GestionSon.h"
#include "Affichage_Valise.h"
#define BASE_TIMEOUT 100
#define NB_JOUEUR 4
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 >= 0x3c2e1){
tabJoueur[k].score ++;
tabJoueur[k].timeout = BASE_TIMEOUT;
/* TEMPORAIRE : il faudra par la suite jouer le son et gérer les affichages */
}
}
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);
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 );
SysTick_On;
SysTick_Enable_IT;
while (1)
{
}
}