123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #include <stdlib.h>
- #include "Affichage_Valise.h"
- #include "DriverJeuLaser.h"
-
-
- #define SEUIL_MIN 0x00020510
- #define SEUIL_MAX 0x01933510
-
-
- //short int = 16 bit signé
- //char = 8 bit non signé (0 à 255)
- extern int PeriodeSonMicroSec;
-
- extern void CallBackSon(void);
-
- extern int TableauIndex;
-
- extern int LongueurSon;
-
- extern int DFT_ModuleAuCarre(short int*, char);
-
- extern short int LeSignal;
-
- short int dma_buff[64] ;
-
- int res[4];
-
- char cible_active, LED_cible_active;
-
- typedef struct {
- short int valeur_k, score, confirmations;
- } Joueur;
-
- Joueur tous_joueurs[4];
-
-
- void jouerSon() {
- //on remet l'index du tableau à zéro, du coup ça va jouer une fois le son
- TableauIndex = 0;
- }
-
-
- void changer_cible(){
-
- int i;
-
- for(i = 0; i < 4; i++){
- Prepare_Afficheur(i+1,tous_joueurs[i].score);
- }
-
- int prochaine_cible = cible_active;
- int LED_prochaine_cible;
- while(prochaine_cible == cible_active){
- prochaine_cible = (rand() % 4 + 1);
- }
-
- Choix_Capteur(prochaine_cible);
-
- if(prochaine_cible == 1){
- LED_prochaine_cible = LED_Cible_1;
- }
- else if(prochaine_cible == 2){
- LED_prochaine_cible = LED_Cible_2;
- }
- else if(prochaine_cible == 3){
- LED_prochaine_cible = LED_Cible_3;
- }
- else {
- LED_prochaine_cible = LED_Cible_4;
- }
-
- Prepare_Clear_LED(LED_cible_active);
- Prepare_Set_LED(LED_prochaine_cible);
- Mise_A_Jour_Afficheurs_LED();
- cible_active = prochaine_cible;
- LED_cible_active = LED_prochaine_cible;
- jouerSon();
-
- for(i = 0; i < 4; i++){
- tous_joueurs[i].confirmations = 0;
- }
- }
-
-
-
-
-
-
- void faire_dft() {
-
-
- //on fait la mesure
-
- Start_DMA1(64);
- Wait_On_End_Of_DMA1();
- Stop_DMA1;
-
-
- //on l'exploite en regardant que les raies qui nous intéresse
- char k[4] = {17,18,19,20};
-
- int i;
-
- /*
- for(i=0;i<64;i++){
- res[i] = DFT_ModuleAuCarre(dma_buff, i);
- }*/
-
- for(i=0;i<4;i++){
- res[i] = DFT_ModuleAuCarre(dma_buff, k[i]);
- if (res[i] > SEUIL_MIN && res[i] < SEUIL_MAX){
- if(tous_joueurs[i].confirmations < 5){
- tous_joueurs[i].confirmations++;
- if(tous_joueurs[i].confirmations == 5){
- tous_joueurs[i].score++;
- changer_cible();
- }
- }
- }
- }
-
-
- }
-
-
- 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();
-
- // 72Mhz pour 1s
- // ? ticks pour 5*10^-3 s
- // règle de trois.
-
- //on décide de faire une DFT toutes les 5 ms
- Systick_Period_ff(360000);
-
- //on met priorité 9 car la mise à jour de la LED est de priorité 8
- Systick_Prio_IT(9,faire_dft);
-
- Init_Conversion_On_Trig_Timer_ff( ADC1, TIM2_CC2, 225 );
-
- //il faut configurer la fréquence d'échantillonage de l'ADC
- 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_buff );
-
-
- //============================================================================
-
- //initialiser les pistolets
- Init_Affichage();
-
- srand(21);
-
-
-
- int nbCycles = PeriodeSonMicroSec * 72; //PeriodeSonMicroSec * 0.000001 * 72 000 000
-
- Timer_1234_Init_ff( TIM4, nbCycles);
- //Timer_1234_Init_ff( TIM5, 72000000 * 3); // Permet de lancer le timer de changement de cible toutes les 3 secondes
-
- //avant de config le timer on va mettre la taille de l'index supérieur à la taille du fichier audio
- //comme ça, le logiciel ne va pas jouer le son de suite
-
- TableauIndex = LongueurSon;
-
-
- Active_IT_Debordement_Timer( TIM4, 2, CallBackSon );
-
- //on l'active avec une priorité de 9 car la led est de priorité 8
- //Active_IT_Debordement_Timer( TIM5, 9, changer_cible);
-
- PWM_Init_ff( TIM3, 3, 720); //initialisation de la PWM sur canal 3 timer 3
-
- //on met période tick à 720 sur une clock à 72 Mhz
-
- //période de 720/72.10^6 = 72 / 72.10^5 = 1 / 10^5 = 10^-5 = 10 µs
-
- // donc fréquence de 10^5 Hz = 100 kHz
-
- GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL);
-
- SysTick_On;
- SysTick_Enable_IT; // activer l'interruption configurée
- changer_cible();
-
- while (1)
- {
- }
- }
-
-
|