Pousse-seringue Ulg

Dependencies:   FSR Pousse_Seringue mbed

Fork of Pousse_seringue_Ulg by philippe renoire

Revision:
0:dd840e8b1a2a
Child:
1:b5b006e4cd59
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 27 09:34:52 2016 +0000
@@ -0,0 +1,283 @@
+
+#include "mbed.h"
+#include "Stepper.h"
+#include "FSR.h"
+#define pi 3.141592653589793
+
+FSR gauge1(PA_1, 10);      // A1 Strain gauge, a 10k resistor is used
+FSR gauge2(PA_4, 10);      // A2 Strain gauge
+DigitalIn home(PA_9);      // D8
+DigitalIn switch1(PB_3);   // D3 Switch => Rouge
+DigitalIn switch2(PB_5);   // D4 Switch => Noir
+InterruptIn switch3(PA_10);  // D2 Switch => Vert
+Stepper mot(PB_6, PC_7);   // D10 D9 motor :NEMA 17
+DigitalOut myled(LED2);
+Serial s(SERIAL_TX, SERIAL_RX);
+
+
+int main()
+{
+////////////////// Initialisation //////////////////
+    float entree          = 0;
+    int mode            = 0;       // Pousser (1)  ou tirer (2)
+    float vitesse         = 0;       // vitesse d'avance
+    float avance          = 0;       // avance, nombre de pas à realiser
+    int vol_ou_deb      = 0;       // travailler en volume (1) ou en debit (2)
+    float section         = 0;       // section de la seringue
+    float volume          = 0;       // volume demande
+    float debit           = 0;       // debit demande
+    mot.setSpeed(80000);           // vitesse max <!> NE PAS METTRE DE MICROPAS <!>
+    int paire=0;
+    int change=0;
+
+////////////////// Mode : Pousser ou tirer ? //////////////////
+    printf("Bonjour utilisateur, quel mode souhaitez-vous utiliser :\n");
+    printf("Pour vider une seringue de son contenu, tapez 1 \n");
+    printf("Pour remplir une seringue, tapez 2 \n");
+    scanf("%d", &mode);                                            // Choix du mode
+    while( mode != 1 && mode != 2) 
+    {                   // Verifie que l'entree est correcte
+        printf("Une erreur s'est produite quelque part.\n");
+        printf("Pour vider une seringue de son contenu, tapez 1 \n");
+        printf("Pour remplir une seringue, tapez 2 \n");
+        scanf("%d", &mode);
+    }
+
+//////////////////  Si pousser : placement du chariot //////////////////
+    if (mode == 1)                              // On retourne vers le moteur puis on avance jusqu'à toucher la seringue
+    {                            
+        mot.rotate(0);                          // Sens de rotation : 1 = pousser, 0 = tirer
+        while (switch2 == 0 && switch3 == 0)    // Tant que pas à fond à gauche (côte moteur) ou switch3 pas enfonce, on continue
+        {
+        }
+        mot.stop();
+        printf("Veuillez placez la seringue. \n Une fois la seringue mise en place, tapez 1\n");
+        scanf("%f", &entree);
+        while( entree != 1) {                   // Verifie que l'entree est correcte
+            printf("L'entree est incorrecte.\n");
+            printf("Une fois la seringue mise en place, tapez 1\n");
+            scanf("%f", &entree);
+        }
+        mot.rotate(1);                          // Puis on repart dans l'autre sens.
+        while(gauge1.readRaw() <= 0.4 && switch1 == 0)          //Tant que le contacte n'a pas eu lieu
+        {
+        }
+        mot.stop();
+        printf("Le contact entre la seringue et la fixation est realise\n");
+    }
+
+//////////////////  Si tirer : placement du chariot //////////////////
+    if (mode == 2)                              // Si tirer
+    {                        
+        mot.rotate(1);                          // Sens de rotation : 1 = pousser, 0 = tirer
+        while (switch1 == 0 && switch3 == 0)    // Tant que pas à fond à droite (côte seringue) ou switch3 pas enfonce, on continue
+        {  
+        }
+        mot.stop();
+        printf("Veuillez placez la seringue. \n Une fois la seringue mise en place, tapez 1\n");
+        scanf("%f", &entree);
+        while( entree != 1) {                   // Verifie que l'entree est correcte
+            printf("L'entree est incorrecte.\n");
+            printf("Une fois la seringue mise en place, tapez 1\n");
+            scanf("%f", &entree);
+        }
+        mot.rotate(0);                          // Puis on repart dans l'autre sens.
+        while(gauge2.readRaw() <= 0.4 && switch2 == 0)          //Tant que le contacte n'a pas eu lieu
+        { 
+        }
+        mot.stop();
+        printf("Le contact entre la seringue et la fixation est realise.\n");
+    }
+
+//////////////////  Actionnement de la seringue  //////////////////
+
+    printf("Voulez-vous travailler en volume ou en debit?\n");
+    printf("Pour travailler en volume, tapez 1 \n");
+    printf("Pour travailler en debit, tapez 2 \n");
+    scanf("%d", &vol_ou_deb);                    // choix : travailler en volume ou en debit
+    while( vol_ou_deb != 1 && vol_ou_deb != 2)   // Verifie que l'entree est correcte
+    { 
+        printf("Une erreur s'est produite quelque part \n");
+        printf("Pour travailler en volume, tapez 1 \n");
+        printf("Pour travailler en debit, tapez 2 \n");
+        scanf("%d", &vol_ou_deb);
+    }
+
+//>>>>>>> VOLUME
+    if (vol_ou_deb == 1 )
+    {
+            printf("Veuillez maintenant indiquer le diamètre de la seringue s'il vous plait [mm].\n");
+            scanf("%f", &section);
+            while( section < 0 || section > 1000)  // Verifie que l'entree est correcte
+            {                   
+                printf("Une erreur s'est produite quelque part.\n");
+                printf("Veuillez indiquer le diametre de la seringue s'il vous plait [mm^2].\n");
+                scanf("%f", &section);
+            }
+            printf("Merci, veuillez maintenant indiquer le volume voulu s'il vous plait [micro-litre].\n");
+            scanf("%f", &volume);
+            while( volume < 0 && volume > 500000)  // Verifie que l'entree est correcte
+            {                   
+                printf("Une erreur s'est produite quelque part.\n");
+                printf("Veuillez indiquer le volume voulu s'il vous plait [micro-litre]. \n");
+                scanf("%f", &volume);
+            }
+            avance = 376500*volume/(0.25*pi*section*section)//+1000; // Sans micro-pas : 376500 = 1mm; avec micro-pas 192000 = 1mm
+    }
+//>>>>>>> DEBIT
+    if (vol_ou_deb == 2 )
+    {
+            printf("Veuillez maintenant indiquer le diametre de la seringue s'il vous plait [mm].\n");
+            scanf("%f", &section);
+            while( section < 0 || section > 1000) // Verifie que l'entree est correcte
+            {                   
+                printf("Une erreur s'est produite quelque part.\n");
+                printf("Veuillez indiquer le diametre de la seringue s'il vous plait [mm].\n");
+                scanf("%f", &section);
+            }
+            printf("Merci, veuillez maintenant indiquer le debit voulu s'il vous plait [micro-litre/ seconde].\n");
+            scanf("%f", &debit);
+            while( debit < 0 && debit > 2) // Verifie que l'entree est correcte
+            {                   
+                printf("Une erreur s'est produite quelque part.\n");
+                printf("Veuillez indiquer le debit voulu s'il vous plait [micro-litre/seconde]. \n");
+                scanf("%f", &debit);
+            }
+            vitesse = 376500*debit/(0.25*pi*section*section); //Si pas de micro-pas 192000 si micro-pas.
+    }
+
+/////////////////// Si pousser //////////////////
+    if (mode == 1) 
+    {
+//>>>>>>> VOLUME
+        if (vol_ou_deb == 1)                // Si on travaille en VOLUME
+        {   
+            printf("Demarrage de l'operation.\n");   
+            mot.rotate(1);                  // Sens de rotation : 1 = pousser 0 = tirer
+            mot.setPositionZero();
+            mot.goesTo(avance);
+            
+            while(switch1==0)
+            {
+             if(switch3==1 && paire==0)
+                {
+                 mot.stop();
+                 printf(" ");//printf("Arret temporaire");
+                 change = 1;
+                }
+             if (switch3 == 0 & change == 1)
+                {
+                 paire = paire +1;
+                 paire = paire % 2;
+                 change = 0;
+                }
+             if (switch3 == 1 && paire == 1)
+                {   
+                printf(" ");//printf("Redemarrage");
+                mot.rotate(1);
+                mot.goesTo(avance);
+                change = 1;
+                } 
+            }
+        }
+
+//>>>>>>> DEBIT
+        if (vol_ou_deb == 2)                // Si on travaille en debit
+        {   
+            printf("Demarrage de l'operation.\n");           
+            mot.setSpeed(vitesse);
+            mot.rotate(1);                  // Sens de rotation : 1 = pousser 0 = tirer.
+            while (switch1 == 0)             // Arret si fin de course
+            {
+             if(switch3==1 && paire==0)
+                {
+                 mot.stop();
+                 printf(" ");//printf("Arret temporaire");
+                 change = 1;
+                }
+             if (switch3 == 0 & change == 1)
+                {
+                 paire = paire +1;
+                 paire = paire % 2;
+                 change = 0;
+                }
+             if (switch3 == 1 && paire == 1)
+                {   
+                printf(" ");//printf("Redemarrage");
+                mot.setSpeed(vitesse);
+                mot.rotate(1);
+                change = 1;
+                } 
+            }
+            mot.stop();
+            printf("Fin de l'operation.");
+        }
+    }
+/////////////////// Si tirer //////////////////
+
+    if (mode == 2) 
+    {
+//>>>>>>> VOLUME
+        if (vol_ou_deb == 1)                // Si on travaille en VOLUME
+        {   
+            printf("Demarrage de l'operation.\n");   
+            mot.rotate(0);                  // Sens de rotation : 1 = pousser 0 = tirer
+            mot.setPositionZero();
+            mot.goesTo(avance);
+            
+            while(switch2==0)
+            {
+             if(switch3==1 && paire==0)
+                {
+                 mot.stop();
+                 printf(" ");//printf("Arret temporaire");
+                 change = 1;
+                }
+             if (switch3 == 0 & change == 1)
+                {
+                 paire = paire +1;
+                 paire = paire % 2;
+                 change = 0;
+                }
+             if (switch3 == 1 && paire == 1)
+                {   
+                printf(" ");//printf("Redemarrage");
+                mot.rotate(0);
+                mot.goesTo(avance);
+                change = 1;
+                } 
+            }
+        }
+
+//>>>>>>> DEBIT
+        if (vol_ou_deb == 2)                // Si on travaille en debit
+        {   
+            printf("Demarrage de l'operation.\n");           
+            mot.setSpeed(vitesse);
+            mot.rotate(0);                  // Sens de rotation : 1 = pousser 0 = tirer.
+            //printf("Je tire. \n");      
+            while (switch2 ==0)             // Arret si fin de course
+            {
+             if(switch3==1 && paire==0)
+                {
+                 mot.stop();
+                 printf(" ");//printf("Arret temporaire");
+                 change = 1;
+                }
+             if (switch3 == 0 & change == 1)
+                {
+                 paire = paire +1;
+                 paire = paire % 2;
+                 change = 0;
+                }
+             if (switch3 == 1 && paire == 1)
+                {   
+                printf(" ");//printf("Redemarrage");
+                mot.setSpeed(vitesse);
+                mot.rotate(0);
+                change = 1;
+                } 
+            }
+        }
+    }
+ }