Ejemplo n.º 1
0
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;
	}	
}
Ejemplo n.º 2
0
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 ;
	}

}