Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: PSL_ROBOT_lorenzo robot_lorenzo recepteur_mbed_os_6
MX12.h@1:a9ba9cf928fe, 2021-11-03 (annotated)
- 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?
User | Revision | Line number | New 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 */ |