116 lines
2.6 KiB
C
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)
|
|
{
|
|
}
|
|
}
|
|
|