CRAC Team / Mbed 2 deprecated Carte_Pompe_V1_2020

Dependencies:   mbed ident_crac

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers class_ventouse.cpp Source File

class_ventouse.cpp

00001 #include "class_ventouse.h"
00002 //valeur de seuil des capteurs de pression
00003 float seuil[NB_VENTOUSES] = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1};
00004 #define PWM_POMPE 0.7
00005 #define PWM_ELECTROVANNE 0.3
00006 
00007 Ventouse::Ventouse(PinName pinPompe, PinName pinElectrovanne, PinName pinCapteurPression, char index) : m_pinPompe(pinPompe),
00008 m_pinElectrovanne(pinElectrovanne), m_pinCapteurPression(pinCapteurPression), m_index(index)
00009 {
00010     m_pompe = new PwmOut(m_pinPompe);
00011     m_electrovanne = new PwmOut(m_pinElectrovanne);
00012     m_pression = new AnalogIn(m_pinCapteurPression);
00013     
00014     m_pompe->period_us(20);
00015     m_electrovanne->period_us(20);
00016     
00017     m_pompe->write(0);
00018     m_electrovanne->write(0);
00019     
00020     flag_attraper = 0;
00021     flag_relacher = 0;
00022     
00023     etat = Attente; 
00024     m_ack = 0;
00025     flag_electrovanne = 1;
00026 }
00027 
00028 void Ventouse::automate()
00029 {
00030     switch(etat)
00031     {
00032         case Attente :
00033             if(flag_attraper)
00034             {   
00035                 attraper();
00036                 etat = Attraper;
00037             }
00038             break;
00039             
00040         case Attraper :
00041             wait_ms(10.0);
00042             if(getPression()==1)
00043             {   
00044                 etat = Attraper_ok;
00045             }else if(flag_relacher)
00046             {
00047                 relacher();
00048                 etat = Relacher;
00049             }
00050             break;
00051             
00052         case Attraper_ok :
00053             if(flag_relacher)
00054             {
00055                 relacher();
00056                 etat = Relacher;
00057             }
00058             break;
00059             
00060         case Relacher :
00061             wait_ms(10.0);
00062             if(getPression() == 0)
00063             {
00064                 if(flag_electrovanne) m_electrovanne->write(0);
00065                 etat = Attente;  
00066             }
00067             break;      
00068     }
00069 }
00070 
00071 void Ventouse::action(bool action)
00072 {
00073     flag_attraper = action;
00074     flag_relacher = !action;
00075 }
00076 
00077 void Ventouse::attraper()
00078 {
00079     m_pompe->write(PWM_POMPE);
00080     if(flag_electrovanne) m_electrovanne->write(0.0);
00081     //modifier ligne de condition
00082 }
00083 
00084 void Ventouse::relacher()
00085 {
00086     if(flag_electrovanne) m_electrovanne->write(PWM_ELECTROVANNE);
00087     m_pompe->write(0.0);
00088 }
00089 
00090 bool Ventouse::getPression()
00091 {   
00092     if(m_pression->read() > seuil[m_index]){
00093         return 1;
00094     }
00095     else{
00096         return 0;
00097     }
00098 }
00099 
00100 bool Ventouse::getPompe()
00101 {
00102     if(m_pompe->read() > 0){
00103         return 1;
00104     }
00105     else{
00106         return 0;
00107     }
00108 }
00109 
00110 void Ventouse::setPompe(float val)
00111 {
00112     m_pompe->write(val);
00113 }
00114 
00115 void Ventouse::setElectrovanne(int val)
00116 {
00117     if(flag_electrovanne)m_electrovanne->write(val);
00118 }