Pousse-seringue Ulg

Dependencies:   FSR Pousse_Seringue mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 #include "mbed.h"
00003 #include "Stepper.h"
00004 #include "FSR.h"
00005 #define pi 3.141592653589793
00006 
00007 FSR gauge1(PA_1, 10);      // A1 Strain gauge, a 10k resistor is used
00008 FSR gauge2(PA_4, 10);      // A2 Strain gauge
00009 DigitalIn home(PA_9);      // D8
00010 DigitalIn switch1(PB_3);   // D3 Switch => Rouge
00011 DigitalIn switch2(PB_5);   // D4 Switch => Noir
00012 InterruptIn switch3(PA_10);  // D2 Switch => Vert
00013 Stepper mot(PB_6, PC_7);   // D10 D9 motor :NEMA 17
00014 DigitalOut myled(LED2);
00015 Serial s(SERIAL_TX, SERIAL_RX);
00016 
00017 
00018 int main()
00019 {
00020 ////////////////// Initialisation //////////////////
00021     float entree          = 0;
00022     int mode            = 0;       // Pousser (1)  ou tirer (2)
00023     float vitesse         = 0;       // vitesse d'avance
00024     float avance          = 0;       // avance, nombre de pas à realiser
00025     int vol_ou_deb      = 0;       // travailler en volume (1) ou en debit (2)
00026     float section         = 0;       // section de la seringue
00027     float volume          = 0;       // volume demande
00028     float debit           = 0;       // debit demande
00029     mot.setSpeed(80000);           // vitesse max <!> NE PAS METTRE DE MICROPAS <!>
00030     int paire=0;
00031     int change=0;
00032 
00033 ////////////////// Mode : Pousser ou tirer ? //////////////////
00034     printf("Bonjour utilisateur, quel mode souhaitez-vous utiliser :\n");
00035     printf("Pour vider une seringue de son contenu, tapez 1 \n");
00036     printf("Pour remplir une seringue, tapez 2 \n");
00037     scanf("%d", &mode);                                            // Choix du mode
00038     while( mode != 1 && mode != 2) 
00039     {                   // Verifie que l'entree est correcte
00040         printf("Une erreur s'est produite quelque part.\n");
00041         printf("Pour vider une seringue de son contenu, tapez 1 \n");
00042         printf("Pour remplir une seringue, tapez 2 \n");
00043         scanf("%d", &mode);
00044     }
00045 
00046 //////////////////  Si pousser : placement du chariot //////////////////
00047     if (mode == 1)                              // On retourne vers le moteur puis on avance jusqu'à toucher la seringue
00048     {                            
00049         mot.rotate(0);                          // Sens de rotation : 1 = pousser, 0 = tirer
00050         while (switch2 == 0 && switch3 == 0)    // Tant que pas à fond à gauche (côte moteur) ou switch3 pas enfonce, on continue
00051         {
00052         }
00053         mot.stop();
00054         printf("Veuillez placez la seringue. \n Une fois la seringue mise en place, tapez 1\n");
00055         scanf("%f", &entree);
00056         while( entree != 1) {                   // Verifie que l'entree est correcte
00057             printf("L'entree est incorrecte.\n");
00058             printf("Une fois la seringue mise en place, tapez 1\n");
00059             scanf("%f", &entree);
00060         }
00061         mot.rotate(1);                          // Puis on repart dans l'autre sens.
00062         while(gauge1.readRaw() <= 0.4 && switch1 == 0)          //Tant que le contacte n'a pas eu lieu
00063         {
00064         }
00065         mot.stop();
00066         printf("Le contact entre la seringue et la fixation est realise\n");
00067     }
00068 
00069 //////////////////  Si tirer : placement du chariot //////////////////
00070     if (mode == 2)                              // Si tirer
00071     {                        
00072         mot.rotate(1);                          // Sens de rotation : 1 = pousser, 0 = tirer
00073         while (switch1 == 0 && switch3 == 0)    // Tant que pas à fond à droite (côte seringue) ou switch3 pas enfonce, on continue
00074         {  
00075         }
00076         mot.stop();
00077         printf("Veuillez placez la seringue. \n Une fois la seringue mise en place, tapez 1\n");
00078         scanf("%f", &entree);
00079         while( entree != 1) {                   // Verifie que l'entree est correcte
00080             printf("L'entree est incorrecte.\n");
00081             printf("Une fois la seringue mise en place, tapez 1\n");
00082             scanf("%f", &entree);
00083         }
00084         mot.rotate(0);                          // Puis on repart dans l'autre sens.
00085         while(gauge2.readRaw() <= 0.4 && switch2 == 0)          //Tant que le contacte n'a pas eu lieu
00086         { 
00087         }
00088         mot.stop();
00089         printf("Le contact entre la seringue et la fixation est realise.\n");
00090     }
00091 
00092 //////////////////  Actionnement de la seringue  //////////////////
00093 
00094     printf("Voulez-vous travailler en volume ou en debit?\n");
00095     printf("Pour travailler en volume, tapez 1 \n");
00096     printf("Pour travailler en debit, tapez 2 \n");
00097     scanf("%d", &vol_ou_deb);                    // choix : travailler en volume ou en debit
00098     while( vol_ou_deb != 1 && vol_ou_deb != 2)   // Verifie que l'entree est correcte
00099     { 
00100         printf("Une erreur s'est produite quelque part \n");
00101         printf("Pour travailler en volume, tapez 1 \n");
00102         printf("Pour travailler en debit, tapez 2 \n");
00103         scanf("%d", &vol_ou_deb);
00104     }
00105 
00106 //>>>>>>> VOLUME
00107     if (vol_ou_deb == 1 )
00108     {
00109             printf("Veuillez maintenant indiquer le diamètre de la seringue s'il vous plait [mm].\n");
00110             scanf("%f", &section);
00111             while( section < 0 || section > 1000)  // Verifie que l'entree est correcte
00112             {                   
00113                 printf("Une erreur s'est produite quelque part.\n");
00114                 printf("Veuillez indiquer le diametre de la seringue s'il vous plait [mm^2].\n");
00115                 scanf("%f", &section);
00116             }
00117             printf("Merci, veuillez maintenant indiquer le volume voulu s'il vous plait [micro-litre].\n");
00118             scanf("%f", &volume);
00119             while( volume < 0 && volume > 500000)  // Verifie que l'entree est correcte
00120             {                   
00121                 printf("Une erreur s'est produite quelque part.\n");
00122                 printf("Veuillez indiquer le volume voulu s'il vous plait [micro-litre]. \n");
00123                 scanf("%f", &volume);
00124             }
00125             avance = 376500*volume/(0.25*pi*section*section)//+1000; // Sans micro-pas : 376500 = 1mm; avec micro-pas 192000 = 1mm
00126     }
00127 //>>>>>>> DEBIT
00128     if (vol_ou_deb == 2 )
00129     {
00130             printf("Veuillez maintenant indiquer le diametre de la seringue s'il vous plait [mm].\n");
00131             scanf("%f", &section);
00132             while( section < 0 || section > 1000) // Verifie que l'entree est correcte
00133             {                   
00134                 printf("Une erreur s'est produite quelque part.\n");
00135                 printf("Veuillez indiquer le diametre de la seringue s'il vous plait [mm].\n");
00136                 scanf("%f", &section);
00137             }
00138             printf("Merci, veuillez maintenant indiquer le debit voulu s'il vous plait [micro-litre/ seconde].\n");
00139             scanf("%f", &debit);
00140             while( debit < 0 && debit > 2) // Verifie que l'entree est correcte
00141             {                   
00142                 printf("Une erreur s'est produite quelque part.\n");
00143                 printf("Veuillez indiquer le debit voulu s'il vous plait [micro-litre/seconde]. \n");
00144                 scanf("%f", &debit);
00145             }
00146             vitesse = 376500*debit/(0.25*pi*section*section); //Si pas de micro-pas 192000 si micro-pas.
00147     }
00148 
00149 /////////////////// Si pousser //////////////////
00150     if (mode == 1) 
00151     {
00152 //>>>>>>> VOLUME
00153         if (vol_ou_deb == 1)                // Si on travaille en VOLUME
00154         {   
00155             printf("Demarrage de l'operation.\n");   
00156             mot.rotate(1);                  // Sens de rotation : 1 = pousser 0 = tirer
00157             mot.setPositionZero();
00158             mot.goesTo(avance);
00159             
00160             while(switch1==0)
00161             {
00162              if(switch3==1 && paire==0)
00163                 {
00164                  mot.stop();
00165                  printf(" ");//printf("Arret temporaire");
00166                  change = 1;
00167                 }
00168              if (switch3 == 0 & change == 1)
00169                 {
00170                  paire = paire +1;
00171                  paire = paire % 2;
00172                  change = 0;
00173                 }
00174              if (switch3 == 1 && paire == 1)
00175                 {   
00176                 printf(" ");//printf("Redemarrage");
00177                 mot.rotate(1);
00178                 mot.goesTo(avance);
00179                 change = 1;
00180                 } 
00181             }
00182         }
00183 
00184 //>>>>>>> DEBIT
00185         if (vol_ou_deb == 2)                // Si on travaille en debit
00186         {   
00187             printf("Demarrage de l'operation.\n");           
00188             mot.setSpeed(vitesse);
00189             mot.rotate(1);                  // Sens de rotation : 1 = pousser 0 = tirer.
00190             while (switch1 == 0)             // Arret si fin de course
00191             {
00192              if(switch3==1 && paire==0)
00193                 {
00194                  mot.stop();
00195                  printf(" ");//printf("Arret temporaire");
00196                  change = 1;
00197                 }
00198              if (switch3 == 0 & change == 1)
00199                 {
00200                  paire = paire +1;
00201                  paire = paire % 2;
00202                  change = 0;
00203                 }
00204              if (switch3 == 1 && paire == 1)
00205                 {   
00206                 printf(" ");//printf("Redemarrage");
00207                 mot.setSpeed(vitesse);
00208                 mot.rotate(1);
00209                 change = 1;
00210                 } 
00211             }
00212             mot.stop();
00213             printf("Fin de l'operation.");
00214         }
00215     }
00216 /////////////////// Si tirer //////////////////
00217 
00218     if (mode == 2) 
00219     {
00220 //>>>>>>> VOLUME
00221         if (vol_ou_deb == 1)                // Si on travaille en VOLUME
00222         {   
00223             printf("Demarrage de l'operation.\n");   
00224             mot.rotate(0);                  // Sens de rotation : 1 = pousser 0 = tirer
00225             mot.setPositionZero();
00226             mot.goesTo(avance);
00227             
00228             while(switch2==0)
00229             {
00230              if(switch3==1 && paire==0)
00231                 {
00232                  mot.stop();
00233                  printf(" ");//printf("Arret temporaire");
00234                  change = 1;
00235                 }
00236              if (switch3 == 0 & change == 1)
00237                 {
00238                  paire = paire +1;
00239                  paire = paire % 2;
00240                  change = 0;
00241                 }
00242              if (switch3 == 1 && paire == 1)
00243                 {   
00244                 printf(" ");//printf("Redemarrage");
00245                 mot.rotate(0);
00246                 mot.goesTo(avance);
00247                 change = 1;
00248                 } 
00249             }
00250         }
00251 
00252 //>>>>>>> DEBIT
00253         if (vol_ou_deb == 2)                // Si on travaille en debit
00254         {   
00255             printf("Demarrage de l'operation.\n");           
00256             mot.setSpeed(vitesse);
00257             mot.rotate(0);                  // Sens de rotation : 1 = pousser 0 = tirer.
00258             //printf("Je tire. \n");      
00259             while (switch2 ==0)             // Arret si fin de course
00260             {
00261              if(switch3==1 && paire==0)
00262                 {
00263                  mot.stop();
00264                  printf(" ");//printf("Arret temporaire");
00265                  change = 1;
00266                 }
00267              if (switch3 == 0 & change == 1)
00268                 {
00269                  paire = paire +1;
00270                  paire = paire % 2;
00271                  change = 0;
00272                 }
00273              if (switch3 == 1 && paire == 1)
00274                 {   
00275                 printf(" ");//printf("Redemarrage");
00276                 mot.setSpeed(vitesse);
00277                 mot.rotate(0);
00278                 change = 1;
00279                 } 
00280             }
00281         }
00282     }
00283  }