carte esclave pompe 2020 V1

Dependencies:   mbed ident_crac

class_ventouse.cpp

Committer:
marwanesaich
Date:
2019-05-20
Revision:
6:fda992188a2f
Parent:
5:176e7353ba1c
Child:
7:43d9c70b6689

File content as of revision 6:fda992188a2f:

#include "class_ventouse.h"
#include "extern.h"
#include "ident_CRAC.h"

float seuil[8] = {0.10, 0.5, 0.5, 0.5, 0.10, 0.5, 0.5, 0.5};


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(50);
    
    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(50);
    m_electrovanne->period_us(50);
    
    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())
            {   
                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 :
            if(!getPression())
            {
                can.write(CANMessage(HACHEUR_RELEASE_ATOM_ACK,&m_index,1));
                if(flag_electrovanne) m_electrovanne->write(0.0);
                etat = Attente;  
            }
            break;
            
    }
}


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

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

}

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

}

bool Ventouse::getPression()
{   
    //printf("capteur %d : %f\n", m_index, m_pression->read());  
    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(float val)
{
    if(flag_electrovanne)m_electrovanne->write(val);
}