int main(int argc, char **argv) { int r; progname = argv[0]; opts(argc, argv); job_init(); prot_init(); r = make_server_socket(host_addr, port); if (r == -1) twarnx("make_server_socket()"), exit(111); if (user) su(user); if (detach) daemonize(); event_init(); set_sig_handlers(); nudge_fd_limit(); unbrake((evh) h_accept); event_dispatch(); twarnx("got here for some reason"); return 0; }
void aim( motorStatus azimuth, motorStatus elevation ){ /* - get angle difference between azimuthStatus and azimuth - calc the number of steps to achive the required angle delta - if angle is neg then set the CW/CCW line LEFT or DOWN - set enable line to high - call step - if braked is false then set enable line to low - repeat for elevation */ int azi_delta, ele_delta; azi_delta = azimuth.steps - azimuthStatus.steps; ele_delta = elevation.steps - elevationStatus.steps; if ( azi_delta < 0 ) setDirection( AZI, LEFT ); else setDirection( AZI, RIGHT ); brake( AZI ); accelStep( abs(azi_delta), AZI ); if ( ele_delta < 0 ) setDirection( ELE, DOWN ); else setDirection( ELE, UP ); brake( ELE ); accelStep( abs(ele_delta), ELE ); //step( abs(ele_delta), ELE ); if ( azimuth.braked == 0 ) unbrake( AZI ); if ( elevation.braked == 0) unbrake( ELE ); //update the current status of the motors azimuthStatus = azimuth; elevationStatus = elevation; return; }
int main(int argc, char **argv) { int r, l; struct event_base *ev_base; struct job binlog_jobs = {}; progname = argv[0]; opts(argc, argv); if (detach && binlog_dir) { if (binlog_dir[0] != '/') { warnx("The -b option requires an absolute path when used with -d."); usage("Path is not absolute", binlog_dir); } } job_init(); prot_init(); /* We want to make sure that only one beanstalkd tries to use the binlog * directory at a time. So acquire a lock now and never release it. */ if (binlog_dir) { r = binlog_lock(); if (!r) twarnx("failed to lock binlog dir %s", binlog_dir), exit(10); } r = make_server_socket(host_addr, port); if (r == -1) twarnx("make_server_socket()"), exit(111); l = r; if (user) su(user); ev_base = event_init(); set_sig_handlers(); nudge_fd_limit(); r = listen(l, 1024); if (r == -1) twarn("listen()"); accept_handler = (evh)h_accept; unbrake(); binlog_jobs.prev = binlog_jobs.next = &binlog_jobs; binlog_init(&binlog_jobs); prot_replay_binlog(&binlog_jobs); if (detach) { daemonize(); event_reinit(ev_base); } event_dispatch(); twarnx("event_dispatch error"); binlog_shutdown(); return 0; }
void autom_10ms (void) { static uint16_t compteur = 0; static uint8_t evitement_en_cours = OFF; static uint8_t compteur_moyenne_evitement = 0; static uint8_t timer_delai_evitement = 0; /**********************************************************************/ /******************************* Autom ********************************/ /**********************************************************************/ //fonction qui definit les actions switch (FLAG_ACTION) { case NE_RIEN_FAIRE: break; default : break; } /**********************************************************************/ /**************************** Evitement *******************************/ /**********************************************************************/ //Fonction permettant de lancer la fonction d'évitement if(EVITEMENT_ADV_AVANT == ON) { if ( (CAPT_US_GAUCHE == 1 || CAPT_US_BALISE == 1 || CAPT_US_DROIT == 1) ) { if ( DETECTION == OFF) { compteur = 0; compteur_moyenne_evitement = 0; timer_delai_evitement = COMPTEUR_TEMPS_MATCH; DETECTION = ON; evitement_en_cours = OFF; if(STRATEGIE_EVITEMENT != EVITEMENT_BACKUP) //On ne veut pas le lancer maintenant pour ce type d'évitement FLAG_ASSERV.erreur = EVITEMENT; brake(); son_evitement(49); } else son_evitement(2); } if (DETECTION == ON && STRATEGIE_EVITEMENT == STOP) { compteur ++; if (compteur > 100) { compteur = 100; if (CAPT_US_GAUCHE == 0 && CAPT_US_BALISE == 0 && CAPT_US_DROIT == 0) { DETECTION = OFF; unbrake(); } } } else if(DETECTION == ON && STRATEGIE_EVITEMENT == EVITEMENT_BACKUP) { if (CAPT_US_GAUCHE == 0 && CAPT_US_BALISE == 0 && CAPT_US_DROIT == 0) compteur_moyenne_evitement++; //Si les capteurs ne voient rien après 10ms alors on incrémente else compteur_moyenne_evitement = 0; if(compteur_moyenne_evitement > 50) { //Si on ne voit rien durant 1s complete alors on relance DETECTION = OFF; unbrake(); } if((COMPTEUR_TEMPS_MATCH - timer_delai_evitement) > 3) {//Si on dépasse le temps d'attente et qu'il y a toujours l'adversaire en face on change de strat FLAG_ASSERV.erreur = EVITEMENT; fin_deplacement(); } } } else if (EVITEMENT_ADV_ARRIERE == ON) { if ( (CAPT_IR_ARRIERE_CENTRE == 0 || CAPT_IR_ARRIERE_DROIT == 0 || CAPT_IR_ARRIERE_GAUCHE == 0) && DETECTION == OFF) { compteur = 0; compteur_moyenne_evitement = 0; timer_delai_evitement = COMPTEUR_TEMPS_MATCH; DETECTION = ON; evitement_en_cours = OFF; if(STRATEGIE_EVITEMENT != EVITEMENT_BACKUP) //On ne veut pas le lancer maintenant pour ce type d'évitement FLAG_ASSERV.erreur = EVITEMENT; brake(); } if (DETECTION == ON && STRATEGIE_EVITEMENT == STOP) { compteur ++; if (compteur > 100) { compteur = 100; if (CAPT_IR_ARRIERE_CENTRE == 1 && CAPT_IR_ARRIERE_DROIT == 1 && CAPT_IR_ARRIERE_GAUCHE == 1) { DETECTION = OFF; unbrake(); } } } else if(DETECTION == ON && STRATEGIE_EVITEMENT == EVITEMENT_BACKUP) { if ((CAPT_IR_ARRIERE_CENTRE == 0 && CAPT_IR_ARRIERE_DROIT == 0 && CAPT_IR_ARRIERE_GAUCHE == 0)) compteur_moyenne_evitement++; else compteur_moyenne_evitement = 0; if(compteur_moyenne_evitement > 50) { DETECTION = OFF; unbrake(); } if((COMPTEUR_TEMPS_MATCH - timer_delai_evitement) > 3) {//Si on dépasse le temps d'attente et qu'il y a toujours l'adversaire en face on change de strat FLAG_ASSERV.erreur = EVITEMENT; fin_deplacement(); } } } else if (DETECTION == ON) { DETECTION = OFF; unbrake(); } }