Pousse-seringue Ulg
Dependencies: FSR Pousse_Seringue mbed
Diff: main.cpp
- Revision:
- 0:dd840e8b1a2a
--- /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", §ion); + 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", §ion); + } + 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", §ion); + 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", §ion); + } + 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; + } + } + } + } + }