PSL_2021 / servomotor_MX12_Lorenzo

Dependents:   PSL_ROBOT_lorenzo robot_lorenzo recepteur_mbed_os_6

Committer:
denis2nis
Date:
Wed Nov 03 12:56:02 2021 +0000
Revision:
1:a9ba9cf928fe
Parent:
0:7556356a8bcd
Child:
2:02f3323a107d
Update doxygen documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
denis2nis 0:7556356a8bcd 1 #ifndef MBED_MX12_H
denis2nis 0:7556356a8bcd 2 #define MBED_MX12_H
denis2nis 0:7556356a8bcd 3
denis2nis 1:a9ba9cf928fe 4 /**
denis2nis 1:a9ba9cf928fe 5 * @file MX12.h
denis2nis 1:a9ba9cf928fe 6 * @brief this header file will contain all required
denis2nis 1:a9ba9cf928fe 7 * definitions and basic utilities functions.
denis2nis 1:a9ba9cf928fe 8 *
denis2nis 1:a9ba9cf928fe 9 * @author Titouan Soulard
denis2nis 1:a9ba9cf928fe 10 * @author Bruno Denis (for comments)
denis2nis 1:a9ba9cf928fe 11 *
denis2nis 1:a9ba9cf928fe 12 */
denis2nis 0:7556356a8bcd 13
denis2nis 0:7556356a8bcd 14 #include "mbed.h"
denis2nis 0:7556356a8bcd 15
denis2nis 0:7556356a8bcd 16 #define MX12_ANSWER_MAX_SIZE 32
denis2nis 0:7556356a8bcd 17 #define MX12_MOTOR_COUNT 16
denis2nis 0:7556356a8bcd 18
denis2nis 1:a9ba9cf928fe 19 /** Class to communicate with Dynamixel MX12 servomotors.
denis2nis 1:a9ba9cf928fe 20 *
denis2nis 1:a9ba9cf928fe 21 *
denis2nis 1:a9ba9cf928fe 22 */
denis2nis 0:7556356a8bcd 23 class MX12
denis2nis 0:7556356a8bcd 24 {
denis2nis 0:7556356a8bcd 25 public:
denis2nis 0:7556356a8bcd 26
denis2nis 1:a9ba9cf928fe 27 /** Status of servomotor
denis2nis 1:a9ba9cf928fe 28 *
denis2nis 1:a9ba9cf928fe 29 */
denis2nis 0:7556356a8bcd 30 enum Status {
denis2nis 0:7556356a8bcd 31 InstructionError,
denis2nis 0:7556356a8bcd 32 OverloadError,
denis2nis 0:7556356a8bcd 33 ChecksumError,
denis2nis 0:7556356a8bcd 34 RangeError,
denis2nis 0:7556356a8bcd 35 OverheatingError,
denis2nis 0:7556356a8bcd 36 AngleLimitError,
denis2nis 0:7556356a8bcd 37 InputVoltageError,
denis2nis 0:7556356a8bcd 38 Unknown,
denis2nis 0:7556356a8bcd 39 Ok
denis2nis 0:7556356a8bcd 40 };
denis2nis 0:7556356a8bcd 41
denis2nis 1:a9ba9cf928fe 42 /** State of communication automaton
denis2nis 1:a9ba9cf928fe 43 *
denis2nis 1:a9ba9cf928fe 44 */
denis2nis 1:a9ba9cf928fe 45 enum State {
denis2nis 0:7556356a8bcd 46 ReadingPosition,
denis2nis 0:7556356a8bcd 47 Writing,
denis2nis 0:7556356a8bcd 48 Available,
denis2nis 0:7556356a8bcd 49 };
denis2nis 0:7556356a8bcd 50
denis2nis 0:7556356a8bcd 51 /** Create MX12 instance
denis2nis 0:7556356a8bcd 52 *
denis2nis 0:7556356a8bcd 53 * @param tx board pin used for transmission in UART daisy chain link
denis2nis 0:7556356a8bcd 54 * to servomotors
denis2nis 0:7556356a8bcd 55 * @param rx board pin used for reception in UART daisy chain link
denis2nis 0:7556356a8bcd 56 * to servomotors
denis2nis 0:7556356a8bcd 57 * @param baud modulation rate of UART signal, unit: Baud
denis2nis 0:7556356a8bcd 58 * to servomotors
denis2nis 0:7556356a8bcd 59 */
denis2nis 0:7556356a8bcd 60 MX12(PinName tx, PinName rx, int baud=115200);
denis2nis 0:7556356a8bcd 61
denis2nis 0:7556356a8bcd 62 /** Send desired speed to a specifc servomotor
denis2nis 0:7556356a8bcd 63 *
denis2nis 0:7556356a8bcd 64 * @param mot_id a unique value in the daisy chain network to identify
denis2nis 0:7556356a8bcd 65 * each servomotor
denis2nis 0:7556356a8bcd 66 * @param speed a float between -1 and 1 that represents the percentage
denis2nis 0:7556356a8bcd 67 * of maximum requested speed
denis2nis 0:7556356a8bcd 68 */
denis2nis 0:7556356a8bcd 69 void SetSpeed(unsigned char mot_id, float speed);
denis2nis 0:7556356a8bcd 70
denis2nis 0:7556356a8bcd 71 char IsAvailable(void);
denis2nis 0:7556356a8bcd 72
denis2nis 0:7556356a8bcd 73 MX12::Status GetStatus(void);
denis2nis 0:7556356a8bcd 74
denis2nis 1:a9ba9cf928fe 75
denis2nis 0:7556356a8bcd 76 void ReadPosition(unsigned char mot_id);
denis2nis 0:7556356a8bcd 77
denis2nis 0:7556356a8bcd 78 float GetPosition(unsigned char mot_id);
denis2nis 0:7556356a8bcd 79
denis2nis 0:7556356a8bcd 80 void PrintAnswer();
denis2nis 0:7556356a8bcd 81
denis2nis 0:7556356a8bcd 82 void rw(unsigned char mot_id, char adress, char len, char *data);
denis2nis 0:7556356a8bcd 83
denis2nis 1:a9ba9cf928fe 84 /** Interupt Routine to read in data from UART daisy chain link
denis2nis 1:a9ba9cf928fe 85 * (serial port)
denis2nis 1:a9ba9cf928fe 86 *
denis2nis 1:a9ba9cf928fe 87 */
denis2nis 0:7556356a8bcd 88 void _ReadCallback();
denis2nis 0:7556356a8bcd 89
denis2nis 0:7556356a8bcd 90 char _chksm;
denis2nis 0:7556356a8bcd 91
denis2nis 0:7556356a8bcd 92 private:
denis2nis 0:7556356a8bcd 93
denis2nis 0:7556356a8bcd 94 UnbufferedSerial _mx12;
denis2nis 0:7556356a8bcd 95 MX12::Status _status;
denis2nis 0:7556356a8bcd 96 char _res[MX12_ANSWER_MAX_SIZE];
denis2nis 0:7556356a8bcd 97 char _res_count;
denis2nis 0:7556356a8bcd 98 char _len;
denis2nis 0:7556356a8bcd 99 MX12::State _state;
denis2nis 0:7556356a8bcd 100 float _angle[MX12_MOTOR_COUNT];
denis2nis 0:7556356a8bcd 101 int _baud;
denis2nis 0:7556356a8bcd 102 };
denis2nis 0:7556356a8bcd 103
denis2nis 0:7556356a8bcd 104 #endif /* MBED_MX12_H */