#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) { } }