PSL_2021 / servomotor_MX12_Lorenzo

Dependents:   PSL_ROBOT_lorenzo robot_lorenzo recepteur_mbed_os_6

Revision:
0:7556356a8bcd
Child:
1:a9ba9cf928fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MX12.h	Wed Nov 03 11:17:12 2021 +0000
@@ -0,0 +1,84 @@
+#ifndef MBED_MX12_H
+#define MBED_MX12_H
+
+/** Class to communicate with Dynamixel MX12 servomotors. 
+ *
+ * 
+ */
+
+#include "mbed.h"
+
+#define MX12_ANSWER_MAX_SIZE 32
+#define MX12_MOTOR_COUNT 16
+
+class MX12 
+{
+    public:
+    
+        enum Status {
+            InstructionError,
+            OverloadError,
+            ChecksumError,
+            RangeError,
+            OverheatingError,
+            AngleLimitError,
+            InputVoltageError,
+            Unknown,
+            Ok
+        };
+        
+        enum State {
+            ReadingPosition,
+            Writing,
+            Available,
+        };
+    
+        /** Create MX12 instance
+         *
+         * @param tx board pin used for transmission in UART daisy chain link 
+         *           to servomotors 
+         * @param rx board pin used for reception in UART daisy chain link 
+         *           to servomotors 
+         * @param baud modulation rate of UART signal, unit: Baud
+         *           to servomotors 
+         */
+        MX12(PinName tx, PinName rx, int baud=115200);
+        
+        /** Send desired speed to a specifc servomotor
+         *
+         * @param mot_id a unique value in the daisy chain network to identify
+         *               each servomotor
+         * @param speed a float between -1 and 1 that represents the percentage
+         *              of maximum requested speed
+         */
+        void SetSpeed(unsigned char mot_id, float speed);
+        
+        char IsAvailable(void);
+        
+        MX12::Status GetStatus(void);
+        
+        void ReadPosition(unsigned char mot_id);
+        
+        float GetPosition(unsigned char mot_id);
+        
+        void PrintAnswer();
+        
+        void rw(unsigned char mot_id, char adress, char len, char *data);
+        
+        void _ReadCallback();
+        
+        char _chksm;
+    
+    private:
+    
+        UnbufferedSerial _mx12;
+        MX12::Status _status;
+        char _res[MX12_ANSWER_MAX_SIZE];
+        char _res_count;
+        char _len;
+        MX12::State _state;
+        float _angle[MX12_MOTOR_COUNT];
+        int _baud;
+};
+
+#endif /* MBED_MX12_H */
\ No newline at end of file