Code FRC 2018

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers robot_general.cpp Source File

robot_general.cpp

00001 #include "robot_general.h"
00002 
00003 DigitalIn Daniels_in(PA_15);
00004 
00005 //DigitalIn UBp(USER_BUTTON);  
00006 InterruptIn UBp_it(USER_BUTTON);
00007 Timeout ubp_to; 
00008 
00009 //Serial dbug(USBTX, USBRX, 115200);   
00010 Serial dbug(PA_0, PA_1, 38400);
00011 
00012 Timer timer_generale;
00013 
00014 int flagUBp = 0, flagDaniels = 0, match_en_cours = 0;
00015 int flagEv = 0, flagAv = 1, flagDpl = 0, flag_auto_suiv = 0;
00016 int sensrotation=-1;
00017 
00018 short pos_balle[10][4];int nb_balle = 0, balle_retrouve = 0;
00019 
00020 
00021 
00022 unsigned int temps_ecoule = 0;
00023 
00024 void isr_UBp();void user_bp_ar();
00025 
00026 enum etat_visee_balle_T {init_visee_balle, fin_vir_rapide, debut_vir_lent, fin_vir_lent, avancer_20,debut_vir_lent2, fin_vir_lent2,avancer,rotation, lancer,  fin_visee_balle, error_visee_balle, D, ED, Perdu, debut_vir_retour, fin_vir_rapide_odo,M, balle_disparue, recalage, recalage3, recalage2, retour};
00027 enum etat_visee_balle_T etat_visee_balle = init_visee_balle , etat_visee_balle_prec = Perdu;
00028 int timer_visee_balle=0;
00029 void automate_visee_balle(); 
00030 
00031 enum etat_pied_ballon_T {init_pied_ballon_dierct, avance_x_DT_pb, rotation_ballon_x_pb, reculer_ballon_x_pb, recalage_pied_pb,fin_pied_ballon, error_pied_ballon};
00032 enum etat_pied_ballon_T etat_pied_ballon = init_pied_ballon_dierct , etat_pied_ballon_prec = fin_pied_ballon;
00033 int timer_pied_ballon = 0;
00034 void automate_pied_ballon();
00035 
00036 enum etat_macro_auto_T {init_macro_auto};
00037 enum etat_macro_auto_T etat_macro_auto = init_macro_auto , etat_macro_auto_prec = init_macro_auto;
00038 int timer_macro_auto = 0;
00039 void automate_macro_auto();
00040 
00041 enum etat_tirer_balle_complet_T {init_tirer_balle_complet, pied_ballon_tbc, visee_balle_tbc, fin_tirer_balle_complet, error_tirer_balle_complet};
00042 enum etat_tirer_balle_complet_T etat_tirer_balle_complet = init_tirer_balle_complet , etat_tirer_balle_complet_prec = init_tirer_balle_complet;
00043 int timer_tirer_balle_complet = 0;
00044 void automate_tirer_balle_complet();
00045 
00046 enum etat_3balles_odo_T {init_tirer_balle_complet, pied_ballon_tbc, visee_balle_tbc, fin_tirer_balle_complet, error_tirer_balle_complet};
00047 enum etat_3balles_odo_T etat_3balles_odo = init_tirer_balle_complet , etat_3balles_odo = init_tirer_balle_complet;
00048 int timer_3balles_odo = 0;
00049 void automate_3balles_odo();
00050 
00051 
00052 void automate_base();
00053 int etat_auto = 0, etat_auto_prec = 0;
00054 int etat_auto_base = 0, etat_auto_base_prec = 0;
00055 
00056 void if_UBp();
00057 void wait_debut_de_partie();
00058 
00059 
00060 
00061 int main() 
00062 {
00063     dbug.printf("\nSETUP    ");
00064     can_init();
00065     UBp_it.rise(&isr_UBp);
00066     //SetOdometrie(26,500,55,0);
00067     bonus_findepartie(0);
00068     
00069     cmd_servo = 0;
00070     ejection_continue = 1;
00071     ejection_active = 1;
00072     temps_ecoule = 0;
00073     match_en_cours = 0;
00074     
00075     //BendRadius(139, 900, -1,0);
00076     //GoStraight(3800,0,0,0);
00077     dbug.printf("END SETUP\n");
00078     while(!match_en_cours){
00079         trait_can();
00080         wait_debut_de_partie();}
00081         
00082     timer_generale.start();
00083     //Rotate(3600);
00084     //BendRadius(139, -900, -1,0);
00085     //while(1);
00086     //dbug.printf("%d\n", flagDaniels);
00087 
00088     while(1)
00089     {
00090         if(temps_ecoule > DUREE_MATCH_TIC)
00091         {
00092             match_en_cours = 0;
00093             SendRawId(ASSERVISSEMENT_STOP);
00094             ejection_active = 0;
00095             automate_ejecteur();
00096             wait(6);
00097             bonus_findepartie(1);
00098             while(1);
00099         }
00100         else if(timer_generale.read_us() > TIKER_GENERALE_US)
00101         {timer_generale.reset();temps_ecoule++;
00102             trait_can();
00103             f_mesure();
00104             pos_disquette();
00105             
00106             //if_UBp();
00107             //automate_base();
00108             automate_pied_ballon();
00109             automate_visee_balle();
00110     
00111             automate_ejecteur();
00112             if(((temps_ecoule%500) == 0))// execute chaques secondes
00113             {
00114                 dbug.printf("Pos x:%d, y:%d, te:%d, Tecoule:%d\n", pos[0], pos[1], pos[2],temps_ecoule*TIKER_GENERALE_US/1000000);
00115                 //dbug.printf("Dis D:%f, G:%f, min:%f\n", DTD_avg_Ex, DTG_avg_Ex, DT_avg_min_Ex);
00116             }
00117         }
00118             
00119     }
00120 }
00121 
00122 void automate_macro_auto()
00123 {
00124     timer_macro_auto++;
00125     switch(etat_macro_auto)
00126     {
00127         case init_macro_auto:
00128             etat_macro_auto = init_macro_auto; timer_macro_auto = 0;
00129             break;
00130     }
00131 }
00132 
00133 void automate_3balles_odo()
00134 {
00135     timer_3balles_odot++;
00136     switch(etat_3balles_odo)
00137     {
00138         case 1:
00139             ejection_active = 1;
00140             ejection_continue = 1; 
00141             GoStraight(1805,0,0,0);
00142             etat_3balles_odo = 2; timer_3balles_odot = 0;
00143             break;
00144                
00145         case 2 :
00146             if(flagFinDpl)
00147             {flagFinDpl = 0; 
00148                 flagDaniels = 1;
00149                 Rotate(-930);//rotation acoté de la balle
00150                 etat_3balles_odo = pied_ballon_tbc; timer_3balles_odot = 0;
00151             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00152             break;
00153             
00154         case 3 :
00155             if(flagFinDpl)
00156             {flagFinDpl = 0;
00157                 ejection_continue = 0;
00158                 GoStraight(1500,0,0,0);//on va vers la deuxieme balle
00159                 etat_3balles_odo = 4; timer_3balles_odot = 0;
00160             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00161             break;   
00162              
00163         case 4 :
00164             if(flagFinDpl)
00165             {flagFinDpl = 0;  
00166                 Rotate(940);//deuxieme balle gobé ,on tourne
00167                 etat_3balles_odo = 5; timer_3balles_odot = 0;
00168             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00169             break;
00170             
00171         case 5 :
00172             if(flagFinDpl)
00173             {flagFinDpl = 0;  
00174                 envoyer_balle = 1;ejection_continue = 1;//tir la deuxieme balle
00175                 flagDaniels = 1;
00176                 Rotate(-940);//ici implementer le deuxieme ciblage laser
00177                 etat_3balles_odo = 6; timer_3balles_odot = 0;
00178             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00179             break;
00180         
00181         case 6:  
00182             if(flagFinDpl)
00183             {flagFinDpl = 0;
00184                 ejection_continue = 0;
00185                 GoStraight(1500,0,0,0);
00186                 etat_3balles_odo = 7; timer_3balles_odot = 0;
00187             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00188             break;
00189                  
00190         case 7:
00191             if(flagFinDpl)
00192             {flagFinDpl = 0;  
00193                 Rotate(930);
00194                 etat_3balles_odo = 8; timer_3balles_odot = 0;
00195             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00196             break;
00197         
00198         case 8:
00199             if(flagFinDpl)
00200             {flagFinDpl = 0;  
00201                 envoyer_balle = 1;ejection_continue = 1;//envoie de la troisième balle
00202                 etat_3balles_odo = 9; timer_3balles_odot = 0;
00203                 sensrotation=1;//on est a gauche sur le terrain ,donc on cible vers la droite 
00204             }else if(timer_3balles_odot>TIMEOUT_ERROR_TIC) etat_3balles_odo = 10;
00205             break;
00206             
00207         case 9:
00208             break;
00209             
00210         case 10:
00211             break;
00212     }
00213 }
00214 
00215 
00216 
00217 void automate_tirer_balle_complet()
00218 {
00219     timer_tirer_balle_complet++;
00220     switch(etat_tirer_balle_complet)
00221     {
00222         case init_tirer_balle_complet:
00223             sensrotation = -sensrotation;
00224             etat_pied_ballon = init_pied_ballon_dierct;
00225             etat_tirer_balle_complet = pied_ballon_tbc; timer_tirer_balle_complet = 0;
00226             break;
00227             
00228         case pied_ballon_tbc:
00229             automate_pied_ballon();
00230             if(etat_pied_ballon == fin_pied_ballon)
00231             {
00232                 etat_visee_balle = init_visee_balle;
00233                 etat_tirer_balle_complet = visee_balle_tbc; timer_tirer_balle_complet = 0;
00234             }
00235             break;
00236             
00237         case visee_balle_tbc:
00238             automate_visee_balle();
00239             if(etat_visee_balle == fin_visee_balle)
00240             {
00241                 //etat_visee_balle = init_visee_balle;
00242                 etat_tirer_balle_complet = fin_tirer_balle_complet; timer_tirer_balle_complet = 0;
00243             }
00244             else if(etat_visee_balle == error_visee_balle)
00245             {
00246                 //etat_visee_balle = init_visee_balle;
00247                 etat_tirer_balle_complet = error_tirer_balle_complet; timer_tirer_balle_complet = 0;
00248             }
00249             break;
00250             
00251         case fin_tirer_balle_complet:
00252             break;
00253             
00254         case error_tirer_balle_complet:
00255             break;
00256         
00257         
00258     }
00259 }
00260 
00261 void automate_pied_ballon()
00262 {
00263     timer_pied_ballon++;
00264     switch(etat_pied_ballon)
00265     {
00266         case init_pied_ballon_dierct:
00267             short y_temp;
00268             if(sensrotation==1)y_temp = 300;
00269             else y_temp = 3700;
00270             GoToPosition(3500, y_temp, 0, 0);
00271             etat_pied_ballon = avance_x_DT_pb; timer_pied_ballon = 0;
00272             break;
00273         
00274         case avance_x_DT_pb:
00275             if(flagFinDpl)
00276             {flagFinDpl = 0;
00277                 GoStraight(3050-DTA_avg_Ex,0,0,0);
00278                 //SetOdometrie(26,pos[0],y_temp,sensrotation*900);
00279                 etat_pied_ballon = rotation_ballon_x_pb; timer_pied_ballon = 0;
00280             }else if(timer_pied_ballon>TIMEOUT_ERROR_TIC) etat_pied_ballon = error_pied_ballon;
00281             break; 
00282             
00283         case rotation_ballon_x_pb:
00284            if(flagFinDpl)
00285             {flagFinDpl = 0;
00286                 if(DTA_avg_Ex<3070 && DTA_avg_Ex>3020){ 
00287                     Rotate(sensrotation*900);
00288                     etat_pied_ballon = reculer_ballon_x_pb; timer_pied_ballon = 0;
00289                 }
00290             }else if(timer_pied_ballon>TIMEOUT_ERROR_TIC) etat_pied_ballon = error_pied_ballon;
00291             break;
00292             
00293          case reculer_ballon_x_pb:
00294            if(flagFinDpl)
00295             {flagFinDpl = 0;
00296                 GoStraight(-250,0,0,0);
00297                 etat_pied_ballon = recalage_pied_pb; timer_pied_ballon = 0;
00298             }else if(timer_pied_ballon>TIMEOUT_ERROR_TIC) etat_pied_ballon = error_pied_ballon;
00299             break; 
00300               
00301         case recalage_pied_pb:
00302            if(flagFinDpl)
00303             {flagFinDpl = 0;
00304                 short y_temp;
00305                 if(sensrotation==1)y_temp = 55;
00306                 else y_temp = 3945;
00307                 SetOdometrie(26,3050,y_temp,sensrotation*900);
00308                 etat_pied_ballon = fin_pied_ballon; timer_pied_ballon = 0;
00309             }else if(timer_pied_ballon>TIMEOUT_ERROR_TIC) etat_pied_ballon = error_pied_ballon;
00310             break;
00311             
00312         case fin_pied_ballon:
00313             break;
00314             
00315         case error_pied_ballon:
00316             break;
00317     }    
00318     if(etat_pied_ballon != etat_pied_ballon_prec)dbug.printf("Etat visee_balle : %d\n",etat_pied_ballon);
00319     etat_pied_ballon_prec = etat_pied_ballon;
00320 }
00321 
00322 
00323 
00324 void automate_visee_balle()
00325 {   
00326     timer_visee_balle++;
00327     
00328     switch(etat_visee_balle)
00329     {
00330         case init_visee_balle ://--------------------------------------0
00331             SendSpeed(80, 600);
00332             Rotate(sensrotation*900);
00333             etat_visee_balle = fin_vir_rapide;
00334             timer_visee_balle=0;
00335             break;
00336             
00337         case fin_vir_rapide : //--------------------------------------1
00338             if(balleg  || balled )
00339             {flagFinDpl = 0;
00340                 dbug.printf("balle 1-----1\n");
00341                 pos_balle[0][2] = pos[2];
00342                 SendRawId(ASSERVISSEMENT_STOP);
00343                 timer_visee_balle = 0;
00344                 etat_visee_balle = debut_vir_lent;
00345             } else if(flagFinDpl || timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00346             break;
00347                 
00348         case debut_vir_lent://--------------------------------------2
00349             if(flagFinDpl)
00350             {flagFinDpl = 0;
00351             dbug.printf("balle 2-----2\n");
00352             SendSpeed(18, 300);
00353             Rotate((pos_balle[0][2]-pos[2])*2);
00354             etat_visee_balle = fin_vir_lent;
00355             }else if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00356             break;   
00357         
00358         case balle_disparue:
00359             break;
00360             
00361         case fin_vir_lent://--------------------------------------3
00362             if(balleg && balled)
00363             {flagFinDpl = 0;
00364                 pos_balle[0][2] = pos[2];
00365                 SendRawId(ASSERVISSEMENT_STOP);
00366                 SendSpeed(100, 600);
00367                 if(DT_avg_min_Ex<2000)etat_visee_balle = avancer;
00368                 else etat_visee_balle = avancer_20;
00369                 timer_visee_balle = 0;
00370             }else{
00371                  etat_visee_balle = debut_vir_lent;
00372                  flagFinDpl = 1;
00373             }
00374             break;   
00375             
00376             
00377         case avancer_20://--------------------------------------4
00378             if(flagFinDpl)
00379             {flagFinDpl = 0;
00380                 GoStraight(DT_avg_min_Ex-D_ROULEAU_AXE-500,0,0,0);
00381                 etat_visee_balle = debut_vir_lent2;
00382                 timer_visee_balle = 0;
00383             }else if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00384             break;
00385             
00386         case debut_vir_lent2://--------------------------------------5
00387             if(flagFinDpl)
00388             {flagFinDpl = 0;
00389             
00390                 SendSpeed(18, 300);
00391                 
00392                 if(!balleg && !balled)
00393                 {
00394                     etat_visee_balle = error_visee_balle;
00395                 }
00396                 else{
00397                     if(!balleg && balled)
00398                     {
00399                         BendRadius(139, sensrotation*30, sensrotation,0);
00400                         etat_visee_balle = fin_vir_lent2;
00401                     }
00402                     else if(balleg && !balled)
00403                     {
00404                         BendRadius(139, 30, sensrotation,0);
00405                         etat_visee_balle = fin_vir_lent2;
00406                     }
00407                     else if(balleg && balled)
00408                     {
00409                         flagFinDpl = 1;
00410                         SendSpeed(100, 600);
00411                         etat_visee_balle = avancer;
00412                         timer_visee_balle = 0;
00413                     } 
00414                 }
00415             }else if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00416             break;   
00417             
00418         case fin_vir_lent2://--------------------------------------6
00419             if(balleg && balled)
00420             {flagFinDpl = 0;
00421                 SendRawId(ASSERVISSEMENT_STOP);
00422                 SendSpeed(100, 600);
00423                 etat_visee_balle = avancer;
00424                 timer_visee_balle = 0;
00425             }else{flagFinDpl = 1;
00426                  etat_visee_balle = debut_vir_lent2;
00427             }
00428             break;  
00429             
00430             
00431         case avancer://--------------------------------------7
00432             if(flagFinDpl)
00433             {flagFinDpl = 0;
00434                 ejection_continue = 0;
00435                 GoStraight(DT_avg_min_Ex-(D_ROULEAU_AXE),0,0,0);
00436                 etat_visee_balle = rotation;
00437             } 
00438             if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00439             break;
00440             
00441         case rotation://--------------------------------------8
00442             if(flagFinDpl)
00443             {flagFinDpl = 0;   
00444                 if(balle_gobbee)
00445                 {
00446                     short dTeta = -pos[2];
00447                     Rotate(dTeta);
00448                     etat_visee_balle = lancer;
00449                     timer_visee_balle = 0;
00450                 }else etat_visee_balle = error_visee_balle;
00451             }
00452             break;
00453             
00454         case lancer:
00455             if(flagFinDpl)
00456             {flagFinDpl = 0; 
00457                 envoyer_balle = 1;
00458                 ejection_continue = 1;
00459                 etat_visee_balle = fin_visee_balle;
00460                 
00461             } if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00462             break; 
00463            
00464         case fin_visee_balle:
00465                 ejection_continue = 1;
00466             break;
00467         case error_visee_balle:
00468                 ejection_continue = 1;
00469             break;
00470             
00471         case retour :
00472             GoToPosition(300, 0, 0, 0);
00473             etat_visee_balle = recalage;
00474             timer_visee_balle = 0;
00475             break;
00476             
00477         case recalage :
00478             if(flagFinDpl)
00479             {flagFinDpl = 0;
00480                 GoStraight(-295,0,0,0);
00481             etat_visee_balle = recalage2;
00482             timer_visee_balle = 0;
00483             }if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00484             break;
00485         case recalage2 :
00486             if(flagFinDpl)
00487             {flagFinDpl = 0;
00488                 GoStraight(30,2,50,0);
00489             etat_visee_balle = recalage2;
00490             timer_visee_balle = 0;
00491             }if(timer_visee_balle>TIMEOUT_ERROR_TIC) etat_visee_balle = error_visee_balle;
00492             break;
00493         case recalage3 :
00494             if(flagFinDpl)
00495             {flagFinDpl = 0;
00496                 etat_visee_balle = init_visee_balle;
00497             }
00498             break;      
00499     }
00500     if(etat_visee_balle != etat_visee_balle_prec)dbug.printf("Etat visee_balle : %d\n",etat_visee_balle);
00501     etat_visee_balle_prec = etat_visee_balle;
00502 }
00503 
00504 void automate_base()
00505 {  
00506     switch(etat_auto_base)
00507     {
00508         case 0 :
00509             temps_ecoule = 0;
00510             etat_auto_base = 1;
00511             break;
00512             
00513         case 1 :
00514             ejection_active = 1;
00515             ejection_continue = 1; 
00516             GoStraight(1805,0,0,0);
00517             etat_auto_base=2;
00518             break;
00519         
00520         case 2 :
00521             if(flagFinDpl)
00522             {flagFinDpl = 0; 
00523                 flagDaniels = 1;
00524                 Rotate(-850);//rotation acoté de la balle
00525                 etat_auto_base=201;
00526 
00527             }
00528             break;
00529             
00530         case 201 :
00531             if(flagFinDpl)
00532             {flagFinDpl = 0; 
00533                 sensrotation=-1;
00534                 etat_visee_balle = init_visee_balle;
00535                 etat_auto_base=202;
00536             }
00537             break;
00538                 
00539         case 202 :
00540             automate_visee_balle(); //ciblage vers la gauche
00541             if(etat_visee_balle == init_visee_balle)//on attend d'etre sur la balle
00542             {
00543                 etat_visee_balle = init_visee_balle;
00544                 etat_auto_base = 3;
00545             }
00546             break;
00547 //---------------------FIN---------------------------
00548             
00549         case 3 :
00550             ejection_continue = 0;
00551             GoStraight(1500,0,0,0);//on va vers la deuxieme balle
00552             etat_auto_base=4;
00553             break;   
00554              
00555         case 4 :
00556             if(flagFinDpl)
00557             {flagFinDpl = 0;  
00558                 Rotate(900);//deuxieme balle gobé ,on tourne
00559                 etat_auto_base=5;
00560             }
00561             break;
00562             
00563         case 5 :
00564             if(flagFinDpl)
00565             {flagFinDpl = 0;  
00566                 envoyer_balle = 1;//tir la deuxieme balle
00567                 flagDaniels = 1;
00568                 Rotate(-850);//ici implementer le deuxieme ciblage laser
00569                 etat_auto_base=601;
00570             }
00571             break;
00572             
00573         case 601 :
00574             if(flagFinDpl)
00575             {flagFinDpl = 0; 
00576                 sensrotation=-1;
00577                 etat_visee_balle = init_visee_balle;
00578                 etat_auto_base=602;
00579             }
00580             break;
00581                 
00582         case 602 :
00583             automate_visee_balle(); //ciblage vers la gauche
00584             if(etat_visee_balle == 4)//on attend d'etre sur la balle
00585             {
00586                 etat_visee_balle = init_visee_balle;
00587                 etat_auto_base = 7;
00588             }
00589             break;
00590         
00591         case 7:  
00592                 ejection_continue = 0;
00593                 GoStraight(1500,0,0,0);
00594                 etat_auto_base=8;
00595             break;
00596                  
00597         case 8 :
00598             if(flagFinDpl)
00599             {flagFinDpl = 0;  
00600                 Rotate(900);
00601                 etat_auto_base=9;
00602             }
00603             break;
00604         
00605         case 9 :
00606             if(flagFinDpl)
00607             {flagFinDpl = 0;  
00608                 envoyer_balle = 1;//envoie de la troisième balle
00609                 etat_auto_base=10;
00610                 sensrotation=1;//on est a gauche sur le terrain ,donc on cible vers la droite 
00611             }
00612             break;
00613             
00614          case 10:
00615             GoStraight(1500,0,0,0);
00616             etat_auto_base=11;
00617             break;   
00618         
00619         case 11 :
00620             if(flagFinDpl)
00621             {flagFinDpl = 0;  
00622                 Rotate(900);
00623                //cmd_servo = 2;
00624                 etat_auto_base=12;
00625             }
00626             break;
00627         
00628         case 12 :   
00629             if(flagFinDpl)
00630             {flagFinDpl = 0;  
00631                 GoStraight(100,2,0,0);
00632                 cmd_servo = 2;
00633                 etat_auto_base=13;
00634             }
00635             break;
00636         case 13 :   
00637             if(flagFinDpl)
00638             {flagFinDpl = 0;  
00639                 GoStraight(3800,0,0,0);
00640                 cmd_servo = 1;
00641                 etat_auto_base=14;
00642             }
00643             break;
00644             
00645          case 14 :   
00646             if(flagFinDpl)
00647             {flagFinDpl = 0;  
00648                 GoStraight(-500,0,0,0);
00649                 etat_auto_base=15;
00650             }
00651             break;   
00652             
00653          case 15 :   
00654             if(flagFinDpl)
00655             {flagFinDpl = 0;  
00656                 Rotate(1800);
00657                 cmd_servo = 0;
00658                 etat_auto_base=16;
00659                 sensrotation=1;
00660             }
00661             break;   
00662          case 16 :
00663                
00664             break;   
00665             
00666             
00667             
00668         case 100 :
00669             etat_visee_balle = init_visee_balle;//On passe dans l'automate de ciblage
00670                 etat_auto_base=101;
00671             break;    
00672             
00673         case 101 :
00674             automate_visee_balle(); //ciblage vers la gauche
00675             if(etat_visee_balle == init_visee_balle)//on attend d'etre sur la balle
00676             {
00677                 etat_visee_balle = init_visee_balle;
00678                 etat_auto_base = 102;
00679             }
00680             break;
00681             
00682         case 102 :
00683             if(flagFinDpl)
00684             {flagFinDpl = 0;  
00685                 ejection_continue = 0;
00686                 GoStraight(DTD_avg_Ex,0,0,0);
00687                 etat_auto_base=103;
00688             }
00689             break;
00690                  
00691         case 103 :
00692             if(flagFinDpl)
00693             {flagFinDpl = 0;  
00694                 Rotate(-pos[2]);
00695                 etat_auto_base=100;
00696             }
00697             break;
00698         default :
00699             
00700             break; 
00701             
00702     }
00703     if(etat_auto_base != etat_auto_base_prec)dbug.printf("Etat auto_base: %d\n",etat_auto_base);
00704     etat_auto_base_prec = etat_auto_base;
00705 }
00706 
00707 void wait_debut_de_partie()
00708 {
00709     if(!Daniels_in)
00710     {
00711         dbug.printf("-----DEBUT DE PARTIE------\n");
00712         match_en_cours = 1;
00713     }
00714 }
00715 
00716 void user_bp_ar(){UBp_it.enable_irq();}
00717 void isr_UBp()
00718 {
00719     UBp_it.disable_irq();dbug.printf("ubp\n");
00720     ubp_to.attach(&user_bp_ar, 0.3);
00721     flagUBp = 1;
00722 }