PINOUT à jour, trame CAN OK
Dependencies: mbed ident_crac
Code carte pompe
class_ventouse.cpp
- Committer:
- kyxstark
- Date:
- 2019-05-25
- Revision:
- 18:972d29c668a5
- Parent:
- 16:5e00af31ae8a
File content as of revision 18:972d29c668a5:
#include "class_ventouse.h" #ifdef ROBOT_SMALL //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 #endif #ifdef ROBOT_BIG float seuil[NB_VENTOUSES] = {0.2, 0.1, 0.2}; #define PWM_POMPE 0.9 #endif 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 DigitalOut(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()==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); } void Ventouse::relacher() { m_pompe->write(0.0); if(flag_electrovanne) m_electrovanne->write(1); wait_ms(100.0); } 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); }