Classes et code de la partie pompe du Robot 2021

Dependencies:   mbed ident_crac

bloc_monopompe.cpp

Committer:
smarecar
Date:
2021-01-19
Revision:
5:88ab89ab12ad
Parent:
4:4bae30d48662

File content as of revision 5:88ab89ab12ad:

#include "bloc_monopompe.h"
// creation du constructeur bloc_monopompe

bloc_monopompe::bloc_monopompe (PinName pompe, PinName electrovanne, PinName capteur) 
 : _pompe(pompe), _electrovanne(electrovanne), _capteur(capteur) 
{
    _pompe.period_us(20) ; // definition de la periode d'une pwm de la pompe
}

// la fonction bloc_monopompe::aspirer permet d'activer la  pompe et fermer l'electrovanne lorsque le capteur de pression capte une difference de pression (regle selon un seuil)
// Et effectue une verificarion si le goblet a ete correctement attraper ou non. La variable _gobelet_en_place nous indique si le goblet est correctement attraper ou non
void bloc_monopompe::aspirer (void) 
{
    _pompe = PWM_POMPE ;
    _electrovanne = ELEC_OUVERTE ;
    wait_ms(100) ;
    
    if(_capteur.read() >= SEUIL_CPT)
    {
        _electrovanne = ELEC_FERME ;
        wait_ms(100) ;
        if(_capteur.read() >= SEUIL_CPT)
        {
            _pompe = 0 ;
            _gobelet_en_place = 1 ;
        }
        else
        {
            _electrovanne = ELEC_OUVERTE ;
            _gobelet_en_place = 0 ;
        }
    }
}

// la fonction bloc_monopompe::relacher relache le goblet en ouvrant l'electrovanne, et effectue a nouveau une verification:
// si le goblet a ete correctement relacher ou non. La variable _gobelet_en_place nous indique si le goblet est correctement attraper ou non
void bloc_monopompe::relacher (void) 
{
    _electrovanne = ELEC_OUVERTE ;
    wait_ms(100) ;
    if(_capteur.read() >= SEUIL_CPT)
        _gobelet_en_place = 1 ;
    else 
       _gobelet_en_place = 0 ;
}
// La fonction bloc_monopompe::etat_actuel retourne l'etat de chaque element (pompe et electrovanne active ou non, et si le capteur de pression capte qql chose ou non
// ces informations sont retourne dans un char ou les 3 derniers bits representes chaque element du bloc
char bloc_monopompe::etat_actuel (void) 
{
    char etat_groupe = 0 ;
    bool etat_pompe;
    bool etat_electrovanne ;
    
    if(_pompe.read() != 0)              //test de la pompe
        etat_pompe = 1 ;
    else 
        etat_pompe = 0 ;
    
    if(_capteur.read() >= SEUIL_CPT)    //test du capteur
        _gobelet_en_place = 1 ;
    else 
        _gobelet_en_place = 0 ;
        
    if(_electrovanne.read())              //test de l'electrovanne
        etat_pompe = 1 ;
    else 
        etat_pompe = 0 ;
    
    // contenue du char : (cela evite l'utilisation de pointeurs (car on a la flemme))
    //0000 0 "bit pompe" "bit elec" "bit cpt"
    return etat_groupe = (etat_pompe << 2) + (etat_electrovanne << 1) + _gobelet_en_place ;    
}

// La fonction bloc_monopompe::stop_pompe stop la pompe et laisse l'electrovanne ouverte
void bloc_monopompe::stop_pompe (void) 
{
    _pompe = PWM_STOP_POMPE ;
    _electrovanne = ELEC_OUVERTE ;
}