void runGame() { timer++; sevenSegDisplayScore(); sevenSegDisplayTime(); displayGameInstructions(); switch (game_state) { case READY: case GAME_OVER: if ((timer % 100) == 0) { flashLEDs(); } break; case P1_START: case P2_START: *RLEDs = 0; break; case IN_GAME: if ((timer % game_speed) == 0) { shiftLEDs(); if (*RLEDs == 0) { game_speed += 5; if ( direction == LToR) { p1_score++; game_state = P1_START; } else { p2_score++; game_state = P2_START; } } } break; } }
void main(){ int increm ; int i; //Initialisation du PIC et chenillard init_PIC() ; flashLEDs(); //Initialisation des moteurs de la station sur appui du BP init : LED1 = 1 ; while(!Init) ; initialisation_station() ; LED1 = 0 ; //Acquisiton des coordonnées de la station : LED6 = 1; while(1) { //Attente de réception d'une trame while (position_drone_flag == 0); //Vérification de la validité de la trame if ((position_drone.gps_x!=0)&&(position_drone.gps_y!=0)) break ; // on sort de la boucle que si les coordonnées reçues ont un sens } longitude_station = position_drone.gps_x ; latitude_station = position_drone.gps_y ; altitude_station = position_drone.altitude_baro ; //libère le flag position_drone_flag = 0; Enable_Azimut = 1 ; Enable_Profondeur = 1 ; LED6 = 0; // Début de la routinede suivi GPS : LED2 = 1 ; while(1) { LED3 = 1-LED3 ; // acquisition des coordonnées du drone : //acquisition_GPS(); //Attente de réception d'une trame while (position_drone_flag == 0); longitude_GPS = position_drone.gps_x ; latitude_GPS = position_drone.gps_y ; altitude_GPS = position_drone.altitude_baro ; //libère le flag position_drone_flag = 0; // calcul des différences de coordonnées drone / GPS : coord_x = (long) (longitude_GPS - longitude_station) ; // 1° = 10 000 coord_y = (long) (latitude_GPS - latitude_station) ; coord_z = altitude_GPS - altitude_station ; // en mètres ///////////////////////// SUIVI AZIMUT ////////////////////////////// // conversion des delta en angle du drone par rapport au Nord ]-pi;+pi°] (positif dans le sens horaire) : angle_drone_azimut = angle_azimut_du_drone(coord_x,coord_y) ; // détermination de l'angle courant du moteur par rapport au Nord angle_moteur_azimut = position_moteur_azimut*2.0*pi/488.0 ; // calcul du delta angle moteur / drone // et attribution du sens de rotation des moteurs : if( fabs(angle_moteur_azimut-angle_drone_azimut) > pi ) { delta_angle_azimut = 2*pi - fabs(angle_moteur_azimut-angle_drone_azimut) ; if (angle_moteur_azimut-angle_drone_azimut>0) sens_rotation_azimut = SENS_HOR ; else sens_rotation_azimut = SENS_TRIGO ; } else { delta_angle_azimut = fabs(angle_moteur_azimut-angle_drone_azimut) ; if (angle_moteur_azimut-angle_drone_azimut>0) sens_rotation_azimut = SENS_TRIGO ; else sens_rotation_azimut = SENS_HOR ; } // calcul du nombre de pas nécessaires pour atteindre l'angle souhaité : nb_pas_azimut = (int) (0.5+(delta_angle_azimut*488.0/(2.0*pi))) ; // déplacement du moteur azimut : tracking_azimut(4) ; ///////////////////////// SUIVI PROFONDEUR ////////////////////////////// // conversion des delta distances (en degrés) en valeurs exploitables (en mètres) // 111194.92... = Rayon_Terre * 2pi / 360 x = (int) (11.11949266*coord_x) ; y = (int) (11.11949266*coord_y) ; // calcul de l'angle du drone par rapport à l'horizontale ]-pi;+pi°] (positif vers le ciel) : angle_drone_profondeur = angle_profondeur_du_drone(x,y,coord_z) ; // détermination de l'angle courant du moteur par rapport à l'horizon : angle_moteur_profondeur = position_moteur_profondeur*2.0*pi/246.0 ; // calcul du delta angle moteur / drone // et attribution du sens de rotation des moteurs : ///////// TODO : VERIFIER QUE TOUTES LES CONDITIONS D'ANGLES APPARAISSENT delta_angle_profondeur = fabs(angle_moteur_profondeur-angle_drone_profondeur) ; if ( angle_moteur_profondeur < angle_drone_profondeur ) sens_rotation_profondeur = SENS_HOR ; else sens_rotation_profondeur = SENS_TRIGO ; // calcul du nombre de pas nécessaires pour atteindre l'angle souhaité : nb_pas_profondeur = (int) (0.5+(delta_angle_profondeur*246.0/(2.0*pi))) ; // déplacement du moteur azimut : tracking_profondeur(20) ; } // Fin de la routine de tracking => on recommence // Cette partie du code ne devrait jamais s'exécuter : while(1) { LED4 = 1 ; Delay10KTCYx(100) ; LED4 = 0 ; LED5 = 1 ; Delay10KTCYx(100) ; LED5 = 0 ; } }