#include "DriverJeuLaser.h" #include "Affichage_Valise.h" extern short int LeSignal[]; extern int DFT_ModuleAuCarre( short int * Signal64ech, char k); int moduleSignal[4] ; short int dma_buf[64] ; int score[4] = {0,0,0,0}; int cnt[4] = {0,0,0,0}; int ordreCible[15] = {1,3,4,2,4,3,1,4,3,2,1,2,3,4} ; int clk5Hz = 0; int i = 0; void miseAJourScores(int score0, int score1, int score2, int score3) { Prepare_Afficheur(1, score0); Prepare_Afficheur(2, score1); Prepare_Afficheur(3, score2); Prepare_Afficheur(4, score3); } void callback() { clk5Hz += 1; Start_DMA1(64); Wait_On_End_Of_DMA1(); Stop_DMA1; moduleSignal[0] = DFT_ModuleAuCarre(&(dma_buf[0]), 17); moduleSignal[1] = DFT_ModuleAuCarre(&(dma_buf[0]), 18); moduleSignal[2] = DFT_ModuleAuCarre(&(dma_buf[0]), 19); moduleSignal[3] = DFT_ModuleAuCarre(&(dma_buf[0]), 20); // Choisir à qui attribuer les points if (moduleSignal[0] > 10000) { cnt[0]+=1; if (cnt[0] >= 15) { score[0] +=1; cnt[0]=0; } } else {cnt[0]=0;} if (moduleSignal[1] > 10000) { cnt[1]+=1; if (cnt[1] >= 15) { score[1] +=1; cnt[1]=0; } } else {cnt[1]=0;} if (moduleSignal[2] > 10000) { cnt[2]+=1; if (cnt[2] >= 15) { score[2] +=1; cnt[2]=0; } } else {cnt[2]=0;} if (moduleSignal[3] > 10000) { cnt[3]+=1; if (cnt[3] >= 15) { score[3] +=1; cnt[3]=0; } } else {cnt[3]=0;} if (clk5Hz %400 ==0) { i = (i+1)%15; if (i == 0){ Choix_Capteur(ordreCible[i]); Prepare_Clear_LED(ordreCible[14]-1); Prepare_Set_LED(ordreCible[i]-1); }else{ Choix_Capteur(ordreCible[i]); Prepare_Clear_LED(ordreCible[i-1]-1); Prepare_Set_LED(ordreCible[i]-1); } } //Pour mise a jour régulière des scores miseAJourScores(score[0],score[1],score[2],score[3]); Mise_A_Jour_Afficheurs_LED(); } int main(void) { // =========================================================================== // ============= INIT PERIPH (faites qu'une seule fois) ===================== // =========================================================================== // Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers CLOCK_Configure(); //Configuration intéruptions timer Systick_Period_ff(5000*72); Systick_Prio_IT(11, callback ); SysTick_On ; SysTick_Enable_IT ; //Configuration 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 ); //La malette Init_Affichage(); //TODO : englober dans fct qui fait changer la cible active régulièrement (mais wait nécessaire) Choix_Capteur(1); Prepare_Set_LED(LED_Cible_1); //============================================================================ while (1) { } }