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, ¶m)) { 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); } } }
/*==========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; }
/* * * 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; }