gestion de servomoteur individuelement, et du message ROS associe

Dependents:   stm32_actuator_gobeur

Committer:
kyxstark
Date:
Thu Jul 08 14:10:08 2021 +0000
Revision:
3:40988c59e571
Child:
5:04d111f63a0f
automate de mouvement d'un servo moteur;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kyxstark 3:40988c59e571 1 #include "Manche_a_air.h"
kyxstark 3:40988c59e571 2
kyxstark 3:40988c59e571 3
kyxstark 3:40988c59e571 4 Manche_a_air::Manche_a_air(PinName pin_servo, float servo_open, float servo_close):
kyxstark 3:40988c59e571 5 _order(close), _servo_open(servo_open), _servo_close(servo_close), _flag_auto_open(0), _flag_auto_close(0)
kyxstark 3:40988c59e571 6 {
kyxstark 3:40988c59e571 7 _servo = new Servo(pin_servo);
kyxstark 3:40988c59e571 8 *_servo = _servo_close;
kyxstark 3:40988c59e571 9
kyxstark 3:40988c59e571 10 }
kyxstark 3:40988c59e571 11
kyxstark 3:40988c59e571 12 void Manche_a_air::update_order(int order)
kyxstark 3:40988c59e571 13 {
kyxstark 3:40988c59e571 14 if(order == 0) _order = close;
kyxstark 3:40988c59e571 15 if(order == 1) _order = open;
kyxstark 3:40988c59e571 16 }
kyxstark 3:40988c59e571 17
kyxstark 3:40988c59e571 18 void Manche_a_air::set_auto_open(int flag, float timeout)
kyxstark 3:40988c59e571 19 {
kyxstark 3:40988c59e571 20 _flag_auto_open = flag;
kyxstark 3:40988c59e571 21 _timeout_auto_open = timeout;
kyxstark 3:40988c59e571 22 _time = clock_s();
kyxstark 3:40988c59e571 23 }
kyxstark 3:40988c59e571 24 void Manche_a_air::set_auto_close(int flag, float timeout)
kyxstark 3:40988c59e571 25 {
kyxstark 3:40988c59e571 26 _flag_auto_close = flag;
kyxstark 3:40988c59e571 27 _timeout_auto_close = timeout;
kyxstark 3:40988c59e571 28 _time = clock_s();
kyxstark 3:40988c59e571 29 }
kyxstark 3:40988c59e571 30
kyxstark 3:40988c59e571 31
kyxstark 3:40988c59e571 32
kyxstark 3:40988c59e571 33 void Manche_a_air::automate(void)
kyxstark 3:40988c59e571 34 {
kyxstark 3:40988c59e571 35 float elapsed = clock_s() - _time;
kyxstark 3:40988c59e571 36 switch(_state)
kyxstark 3:40988c59e571 37 {
kyxstark 3:40988c59e571 38 case closed:
kyxstark 3:40988c59e571 39 if( (_order == open && 0) || ( (elapsed>_timeout_auto_open) && _flag_auto_open ) )
kyxstark 3:40988c59e571 40 {
kyxstark 3:40988c59e571 41 _state = opening;
kyxstark 3:40988c59e571 42 *_servo = _servo_open;
kyxstark 3:40988c59e571 43 _time = clock_s();
kyxstark 3:40988c59e571 44 }
kyxstark 3:40988c59e571 45 break;
kyxstark 3:40988c59e571 46 case opening:
kyxstark 3:40988c59e571 47 if( elapsed > MAA_OPENING_TIMEOUT) //TODO add ack
kyxstark 3:40988c59e571 48 {
kyxstark 3:40988c59e571 49 _state = opened;
kyxstark 3:40988c59e571 50 _time = clock_s();
kyxstark 3:40988c59e571 51 }
kyxstark 3:40988c59e571 52 break;
kyxstark 3:40988c59e571 53 case opened:
kyxstark 3:40988c59e571 54 if( (_order == close && 0) || ( (elapsed>_timeout_auto_close) && _flag_auto_close ) )
kyxstark 3:40988c59e571 55 {
kyxstark 3:40988c59e571 56 _state = closing;
kyxstark 3:40988c59e571 57 *_servo = _servo_close;
kyxstark 3:40988c59e571 58 _time = clock_s();
kyxstark 3:40988c59e571 59 }
kyxstark 3:40988c59e571 60 break;
kyxstark 3:40988c59e571 61 case closing:
kyxstark 3:40988c59e571 62 if( elapsed > MAA_CLOSING_TIMEOUT) //TODO add ack
kyxstark 3:40988c59e571 63 {
kyxstark 3:40988c59e571 64 _state = closed;
kyxstark 3:40988c59e571 65 _time = clock_s();
kyxstark 3:40988c59e571 66 // TODO send ack
kyxstark 3:40988c59e571 67 }
kyxstark 3:40988c59e571 68 break;
kyxstark 3:40988c59e571 69 }
kyxstark 3:40988c59e571 70 }