Exemple #1
0
void main()
{
	BYTE cpt_RB4;
	BYTE cpt_RB5;
    Command cmd;
    BYTE param;
    int run = 1;

	init();
	
	cpt_RB4 = 0;
	cpt_RB5 = 0;
	avancement = 0;

	while(run)
	{
		if (1 == can_receive(&cmd, &param))
		{
			switch (cmd)
			{
				case Avancer:
					avancer(param);
					break;
					
				case Reculer:
					reculer(param);
					break;
					
				case Degree:
					degree();
					break;
				
				case Reset:
					run = 0;
					break;
				default:
					break;
			}	
		}

		if(bouton_RB4_pressed())
		{
			cpt_RB4++;
			can_send(BoutonRB4, cpt_RB4);
		}

		if(bouton_RB5_pressed())
		{
			cpt_RB5++;
			can_send(BoutonRB5, cpt_RB5);
		}
	}
}
Exemple #2
0
/*==========la fonction main()=======*/
int main(void) {

    lcd_init_printf();
    pololu_3pi_init(2000);  
    play_mode(PLAY_CHECK);
    clear();
    print("Hello!");
    play("L16 ceg>c");
    // start receiving data at 9600 baud
    serial_set_baud_rate(9600);
    serial_receive_ring(buffer, 100);
      
    int i=0;
    char dirct,chaine[4], comp='C',*recuper = NULL, *ok;
    long val, veri=0;
    char command;
	/* la boucle qui permet de recuperer la trame caractere par caractere */
    while(1){
	
        for(i=0;i<4;i++){
            command = read_next_byte();
            if (command)
            {
                chaine[i] = command;
            }
        }
         /*recuperation de la lettre recu dans la trame */ 
        dirct = chaine[0];
        
        /*recuperation du reste de la trame en chaine de caractere */
        recuper = strchr(chaine,chaine[1]);
        
        /*conversion de cette chaine recuperer en entier (type long)*/
        val = strtol(recuper, &ok,10);
        
	    /* cette condition permet d'eviter l'execution de la meme trame plusieurs fois*/        
        if(dirct != comp || veri != val)
        {
        clear();
        printf("%s",chaine);
        switch(dirct)
        {
            case 'A':
                avancer(val);
                break;
            case 'R':
                reculer(val);
                break;
            case 'D':
                droit(val);
                break;
            case 'G':
                gauche(val);
                break;
            case 'M':
                melodie();
                break;
            default:
                set_motors(0,0);
                break;
            }
            comp = dirct;
            veri = val;
        }
    }
return 0;
}
Exemple #3
0
/*
 * 
 * name: match permet de gérer les actions pour le match
 * @param
 * @return
 * 
 */
void match()
{
	int hasTurned = 0;
	printf("\r%f : Début de match !\n", timeEnd.read());
	
	// Lancement timer avant mesure de l'angle
	timeAngle.start();
	
    /*
     * Boucle de match donc on fait les actions tant que le temps
     * imparti timeEnd.read() < 90
     * read() pour un temps en seconde et renvoi un float
     * read_ms() pour un temps en miliseconde et renvoi un int
     * read_us() pour un temps en microseconde et renvoi un int
     */
    while(timeEnd.read() < 90.0)
    {	

        /*
         * On affiche sur les leds l'état des capteurs
         * 	=> allumés : pas de détection
         *  => éteint  : détection
         */
        ledGauche = !capteurGauche;
        ledDroite = !capteurDroit;
		
		if(goToDance) {
			/*
			 * Lance détection ennemi
			 */
			ultraG.startRanging();
			while (!ultraG.rangingFinished()) wait(0.01);
			remplirTab(distanceGauche,ultraG.getRange());

			ultraD.startRanging();
			while (!ultraD.rangingFinished()) wait(0.01);
			remplirTab(distanceDroit,ultraD.getRange());
			
			/*
			 * Gestion de la détection des ennemis
			 */
			if(moyenne(distanceGauche) < DISTANCE_CAPTEUR || moyenne(distanceDroit) < DISTANCE_CAPTEUR)
			{
				printf("\r%f : Ennemi détecté :o\n", timeEnd.read());
				qik.stopBothMotors();
			}
			else {
				iLikeToMoveItMoveIt();
			}
		}
		else {
			// Gestion de la pose de la fresque
			if(hasTurned)
			{
				// Lancement détection mur à scratch
				ultraM.startRanging();
				while (!ultraM.rangingFinished()) wait(0.01);
				remplirTab(distanceMilieu,ultraM.getRange());
				
				if(moyenne(distanceMilieu) < DISTANCE_FRESQUE)
				{
					printf("\r%f : Fresque détectée, on fait l'accrochage =)\n", timeEnd.read());
					qik.stopBothMotors();
					/*
					 * Dépose fresque
					 */
					qikP.setMotor1Speed(-50);
					wait(3);
					qikP.setMotor1Speed(0);
					
					// On recule, mettez les feux de recul et la sirène !
					printf("\r%f : Mettez les feux de recul et la sirène !\n", timeEnd.read());
					Timer coucouTimer;
					coucouTimer.start();
					while(coucouTimer.read() <= 4 || moyenne(distanceMilieu) <= DISTANCE_FRESQUE*2) {					
						ultraArr.startRanging();
						while (!ultraArr.rangingFinished()) wait(0.01);
						remplirTab(distanceArr,ultraArr.getRange());
						
						printf("dist. arrière : %d\n", moyenne(distanceArr));
					
						if(ultraArr.getRange() < DISTANCE_CAPTEUR)
						{
							printf("\r%f : Ennemi détecté :o\n", timeEnd.read());			
							qik.stopBothMotors();
						}
						else
						{
							reculer(1);
						}
						
						// Détection mur à scratch
						ultraM.startRanging();
						while (!ultraM.rangingFinished()) wait(0.01);
						remplirTab(distanceMilieu,ultraM.getRange());
					}
					qik.stopBothMotors();
					coucouTimer.stop();
					
					goToDance = 1;
					printf("\r%f : Dance dance mode =D\n", timeEnd.read());
				}
				else
				{
					avancer(0.80);
				}
			}
			else     
			{
				/*
				 * Lance détection ennemi
				 */
				ultraG.startRanging();
				while (!ultraG.rangingFinished()) wait(0.01);
				remplirTab(distanceGauche,ultraG.getRange());

				ultraD.startRanging();
				while (!ultraD.rangingFinished()) wait(0.01);
				remplirTab(distanceDroit,ultraD.getRange());

				/*
				 * Gestion de la détection des ennemis
				 */
				if(moyenne(distanceGauche) < DISTANCE_CAPTEUR || moyenne(distanceDroit) < DISTANCE_CAPTEUR)
				{
					printf("\r%f : Ennemi détecté :o\n", timeEnd.read());
					qik.stopBothMotors();
				}
				else {
					avancer(1);
				}
			}
			
			printf("\r%f : Angle %d sur %d \n", timeEnd.read(), cptPosition, SEUIL);
			if(!hasTurned) {
				hasTurned = (abs(cptPosition) >= SEUIL) && (abs(cptStack) >= SEUIL_STACK);
				if(hasTurned)
					printf("\r%f : On a tourné, on peut détecter la Fresque\n", timeEnd.read());
			}
				
			// Update timer angle
			if(timeAngle.read() >= ANGLE_MAX_TIMER) {
				timeAngle.stop();
				angleGo = 1;
			}
		}

    }

    qikP.setMotor1Speed(-20);
    wait(7.5);

    qikP.setMotor1Speed(0);
    qik.stopBothMotors(); 
}
int main()
{
    int socketServeur;
    int socketClient = -1;
	int clientConnecte = 0;
    int i;
	int ecrit = 0;
	int lu = -1;
	int speed = 500;
	int stopCount = 0;
	int distance = 0;
	int distance_32bits = 0;
    struct sockaddr_in addrServeur;
    socklen_t longueurAdresse; // Nombre d'octets de la structure sockaddr_in
    char nomDuClient[1024], portDuClient[32];
	char commande = 'X';
	char clientONOFF = 'o';
	pthread_t thread1;
	pthread_t thread2;
	
	// Initialisation des GPIO
	initGPIO();
	
	// Initialisation Mutex
	if(pthread_mutex_init(&lock, NULL) != 0)
	{
		perror("mutex");
		exit(-1);
		
	}

    pthread_create(&thread1, NULL, thread_distance, &socketClient);
	pthread_create(&thread2, NULL, thread_speed, &socketClient);
    printf("creation du thread1 et 2\n");
	
    // Cree un socket de communication
	socketServeur = socket(PF_INET, SOCK_STREAM, 0);
    if(socketServeur == -1)
    {
        perror("Socket");
        exit(-1);
    }

    printf("Socket crée avec succès ! (%d)\n", socketServeur);

    addrServeur.sin_addr.s_addr = INADDR_ANY; //toutes
    addrServeur.sin_family = PF_INET;
    addrServeur.sin_port = htons(PORT);
	
	// lose the pesky "Address already in use" error message
	int yes = 1;
	if( setsockopt(socketServeur, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) 
	{
		perror("setsockopt");
		exit(errno);
	}

    // Demande l'attachement local de la socket
    longueurAdresse = sizeof(addrServeur);
    if( bind(socketServeur, (struct sockaddr *)&addrServeur, longueurAdresse) == -1 )
    {
        perror("bind");
        exit(-2);
    }
    printf("Socket attachée avec succès!\n");

    if (listen(socketServeur, CLIENT_MAX) == -1)
    {
        perror("listen");
        exit(errno);
    }
    printf("Socket placée en écoute passive...\n");

	printf("Attente d'une demande de connexion (quitter avec Cltrl-C)\n\n");
		
    while(1)
    {       
		if(clientConnecte == 0)
		{
			socketClient = accept4(socketServeur, (struct sockaddr *)&addrServeur, &longueurAdresse, SOCK_NONBLOCK);
			
			if(socketClient == -1 )
			{
				printf("errno : %d\n", errno);
				perror("accept");
				close(socketClient);
				close(socketServeur);
				exit(errno);
			}
			
			printf("Nouveau client !\n");

			if ( getnameinfo((struct sockaddr*)&addrServeur, sizeof(addrServeur), nomDuClient, sizeof(nomDuClient), portDuClient,
						   sizeof(portDuClient), NI_NUMERICHOST | NI_NUMERICSERV) == 0)
			{
				   printf("client=%s, port=%s\n", nomDuClient, portDuClient);
			}
			
			clientConnecte = 1;
			//ecrits = write(socketClient, &clientONOFF, 1);
		}
		
		
		// nanosleep((struct timespec[]){{0, 10000000}}, NULL);
		lu = read(socketClient, &commande, 1);
		
		if(lu == -1)
		{
			if(errno == EAGAIN) // Nothing to read
			{
				continue;
			}
			else
			{
				printf("Error reading from socketClient ! \n");
				printf("errno = %d \n", errno);
				break;
			}
		}
		
		if(lu == 0)
		{
			printf("Socket closed ! \n");
			speed = 500;
			avancer(0);
			commande = 's';
			close(socketClient);
			clientConnecte = 0;
			continue;
		}
		
		printf("lu = %d\n", lu);
		printf("commande = %c\n", commande);
		
		switch(commande)
		{
			case 'a' :
				//printf("AVANCE\n");
				avancer(speed);
				break;
			case 'r' :
				//printf("RECULE\n");
				reculer(speed);
				break;
			case 'd' :
				//printf("DROITE\n");
				tourner(DROITE, speed);
				break;
			case 'g' :
				//printf("GAUCHE\n");
				tourner(GAUCHE, speed);
				break;
			case '+' :
				speed = speedChange(UP, speed);
				break;
			case '-' :
				speed = speedChange(DOWN, speed);
				break;
			case 's' :
				//printf("REPOS\n");
				avancer(0);
		}
		
		//distance = ultrason();
    }
	
	close(socketClient);
	close(socketServeur);
	
	return 0;
}