carte esclave pompe 2020 V1

Dependencies:   mbed ident_crac

class_ventouse.cpp

Committer:
maximilienlv
Date:
2020-03-05
Revision:
19:952208276c63
Parent:
16:5e00af31ae8a
Child:
20:677dcf689523

File content as of revision 19:952208276c63:

#include "class_ventouse.h"

//float seuil[NB_VENTOUSES] = {0.10, 0.3, 0.3, 0.3, 0.10, 0.3, 0.3, 0.3};
float seuil[NB_VENTOUSES] = {0.1, 0.1, 0.1, 0.1, 0.10, 0.1, 0.1, 0.1};
#define PWM_POMPE 0.7
#define PWM_ELECTROVANNE 0.35

Ventouse::Ventouse(PinName pinPompe, PinName pinCapteurPression, char index) : m_pinPompe(pinPompe),
m_pinCapteurPression(pinCapteurPression), m_index(index)
{
    m_pompe = new PwmOut(m_pinPompe);
    m_pression = new AnalogIn(m_pinCapteurPression);
    
    m_pompe->period_us(20);
    
    m_pompe->write(0);
    
    flag_attraper = 0;
    flag_relacher = 0;
    
    etat = Attente; 
    m_ack = 0;
    flag_electrovanne = 0;
}


Ventouse::Ventouse(PinName pinPompe, PinName pinElectrovanne, PinName pinCapteurPression, char index) : m_pinPompe(pinPompe),
m_pinElectrovanne(pinElectrovanne), m_pinCapteurPression(pinCapteurPression), m_index(index)
{
    m_pompe = new PwmOut(m_pinPompe);
    m_electrovanne = new PwmOut(m_pinElectrovanne);
    m_pression = new AnalogIn(m_pinCapteurPression);
    
    m_pompe->period_us(20);
    m_electrovanne->period_us(20);
    
    m_pompe->write(0);
    m_electrovanne->write(0);
    
    flag_attraper = 0;
    flag_relacher = 0;
    
    etat = Attente; 
    m_ack = 0;
    flag_electrovanne = 1;
}

void Ventouse::automate()
{
    switch(etat)
    {
        case Attente :
            if(flag_attraper)
            {   
                attraper();
                etat = Attraper;
            }
            break;
            
        case Attraper :
            wait_ms(10.0);
            if(getPression()==1)
            {   
                can.write(CANMessage(HACHEUR_GET_ATOM_ACK,&m_index,1));    
                etat = Attraper_ok;
            }else if(flag_relacher)
            {
                relacher();
                etat = Relacher;
            }
            break;
            
        case Attraper_ok :
            if(flag_relacher)
            {
                relacher();
                etat = Relacher;
            }
            break;
            
        case Relacher :
            wait_ms(10.0);
            if(getPression() == 0)
            {
                can.write(CANMessage(HACHEUR_RELEASE_ATOM_ACK,&m_index,1));
                if(flag_electrovanne) m_electrovanne->write(0);
                etat = Attente;  
            }
            break;
            
    }
}


void Ventouse::action(bool action)
{
    flag_attraper = action;
    flag_relacher = !action;
}

void Ventouse::attraper()
{
    m_pompe->write(PWM_POMPE);
    if(flag_electrovanne) m_electrovanne->write(0.0);
}

void Ventouse::relacher()
{
    m_pompe->write(0.0);
    if(flag_electrovanne) m_electrovanne->write(PWM_ELECTROVANNE);
}

bool Ventouse::getPression()
{   
    if(m_pression->read() > seuil[m_index]){
        return 1;
    }
    else{
        return 0;
    }
 
}

bool Ventouse::getPompe()
{
    if(m_pompe->read() > 0){
        return 1;
    }
    else{
        return 0;
    }
}

void Ventouse::setPompe(float val)
{
    m_pompe->write(val);
}

void Ventouse::setElectrovanne(int val)
{
    if(flag_electrovanne)m_electrovanne->write(val);
}