54
54
55
55
56
56
const uint8_t DXL_ID = 1 ;
57
+ static uint8_t op_mode = OP_POSITION;
57
58
58
59
Dynamixel2Arduino dxl (DXL_SERIAL, DXL_DIR_PIN);
59
60
@@ -72,16 +73,15 @@ void loop() {
72
73
static uint32_t pre_time_write, pre_time_read, pre_time_op_mode, pre_time_led;
73
74
static float value = 0 ;
74
75
static bool led_state, flag_op_changed = true ;
75
- static uint8_t op_mode = OP_POSITION;
76
-
76
+
77
77
switch (op_mode)
78
78
{
79
79
case OP_POSITION:
80
80
if (flag_op_changed){
81
81
value = 0 ;
82
82
dxl.torqueOff (DXL_ID);
83
83
if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
84
- op_mode++ ;
84
+ nextOperatingMode () ;
85
85
break ;
86
86
}
87
87
dxl.torqueOn (DXL_ID);
@@ -105,7 +105,7 @@ void loop() {
105
105
value = 0 ;
106
106
dxl.torqueOff (DXL_ID);
107
107
if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
108
- op_mode++ ;
108
+ nextOperatingMode () ;
109
109
break ;
110
110
}
111
111
dxl.torqueOn (DXL_ID);
@@ -129,7 +129,7 @@ void loop() {
129
129
value = 0 ;
130
130
dxl.torqueOff (DXL_ID);
131
131
if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
132
- op_mode++ ;
132
+ nextOperatingMode () ;
133
133
break ;
134
134
}
135
135
dxl.torqueOn (DXL_ID);
@@ -153,7 +153,7 @@ void loop() {
153
153
value = 0 ;
154
154
dxl.torqueOff (DXL_ID);
155
155
if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
156
- op_mode++ ;
156
+ nextOperatingMode () ;
157
157
break ;
158
158
}
159
159
dxl.torqueOn (DXL_ID);
@@ -177,7 +177,7 @@ void loop() {
177
177
value = 0 ;
178
178
dxl.torqueOff (DXL_ID);
179
179
if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
180
- op_mode++ ;
180
+ nextOperatingMode () ;
181
181
break ;
182
182
}
183
183
dxl.torqueOn (DXL_ID);
@@ -201,7 +201,7 @@ void loop() {
201
201
value = 0 ;
202
202
dxl.torqueOff (DXL_ID);
203
203
if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
204
- op_mode++ ;
204
+ nextOperatingMode () ;
205
205
break ;
206
206
}
207
207
dxl.torqueOn (DXL_ID);
@@ -227,7 +227,7 @@ void loop() {
227
227
228
228
if (millis () - pre_time_op_mode >= (uint32_t )60 *1000 ){
229
229
pre_time_op_mode = millis ();
230
- op_mode++ ;
230
+ nextOperatingMode () ;
231
231
flag_op_changed = true ;
232
232
}
233
233
@@ -236,4 +236,29 @@ void loop() {
236
236
led_state == true ? dxl.ledOn (DXL_ID) : dxl.ledOff (DXL_ID);
237
237
led_state = !led_state;
238
238
}
239
+ }
240
+
241
+ void nextOperatingMode () {
242
+ switch (op_mode) {
243
+ case OP_CURRENT:
244
+ op_mode = OP_VELOCITY;
245
+ break ;
246
+ case OP_VELOCITY:
247
+ op_mode = OP_POSITION;
248
+ break ;
249
+ case OP_POSITION:
250
+ op_mode = OP_EXTENDED_POSITION;
251
+ break ;
252
+ case OP_EXTENDED_POSITION:
253
+ op_mode = OP_CURRENT_BASED_POSITION;
254
+ break ;
255
+ case OP_CURRENT_BASED_POSITION:
256
+ op_mode = OP_PWM;
257
+ break ;
258
+ case OP_PWM:
259
+ op_mode = OP_CURRENT;
260
+ break ;
261
+ default :
262
+ op_mode = OP_POSITION;
263
+ }
239
264
}
0 commit comments