5454
5555
5656const uint8_t DXL_ID = 1 ;
57+ static uint8_t op_mode = OP_POSITION;
5758
5859Dynamixel2Arduino dxl (DXL_SERIAL, DXL_DIR_PIN);
5960
@@ -72,16 +73,15 @@ void loop() {
7273 static uint32_t pre_time_write, pre_time_read, pre_time_op_mode, pre_time_led;
7374 static float value = 0 ;
7475 static bool led_state, flag_op_changed = true ;
75- static uint8_t op_mode = OP_POSITION;
76-
76+
7777 switch (op_mode)
7878 {
7979 case OP_POSITION:
8080 if (flag_op_changed){
8181 value = 0 ;
8282 dxl.torqueOff (DXL_ID);
8383 if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
84- op_mode++ ;
84+ nextOperatingMode () ;
8585 break ;
8686 }
8787 dxl.torqueOn (DXL_ID);
@@ -105,7 +105,7 @@ void loop() {
105105 value = 0 ;
106106 dxl.torqueOff (DXL_ID);
107107 if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
108- op_mode++ ;
108+ nextOperatingMode () ;
109109 break ;
110110 }
111111 dxl.torqueOn (DXL_ID);
@@ -129,7 +129,7 @@ void loop() {
129129 value = 0 ;
130130 dxl.torqueOff (DXL_ID);
131131 if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
132- op_mode++ ;
132+ nextOperatingMode () ;
133133 break ;
134134 }
135135 dxl.torqueOn (DXL_ID);
@@ -153,7 +153,7 @@ void loop() {
153153 value = 0 ;
154154 dxl.torqueOff (DXL_ID);
155155 if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
156- op_mode++ ;
156+ nextOperatingMode () ;
157157 break ;
158158 }
159159 dxl.torqueOn (DXL_ID);
@@ -177,7 +177,7 @@ void loop() {
177177 value = 0 ;
178178 dxl.torqueOff (DXL_ID);
179179 if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
180- op_mode++ ;
180+ nextOperatingMode () ;
181181 break ;
182182 }
183183 dxl.torqueOn (DXL_ID);
@@ -201,7 +201,7 @@ void loop() {
201201 value = 0 ;
202202 dxl.torqueOff (DXL_ID);
203203 if (dxl.setOperatingMode (DXL_ID, op_mode) == false ){
204- op_mode++ ;
204+ nextOperatingMode () ;
205205 break ;
206206 }
207207 dxl.torqueOn (DXL_ID);
@@ -227,7 +227,7 @@ void loop() {
227227
228228 if (millis () - pre_time_op_mode >= (uint32_t )60 *1000 ){
229229 pre_time_op_mode = millis ();
230- op_mode++ ;
230+ nextOperatingMode () ;
231231 flag_op_changed = true ;
232232 }
233233
@@ -236,4 +236,29 @@ void loop() {
236236 led_state == true ? dxl.ledOn (DXL_ID) : dxl.ledOff (DXL_ID);
237237 led_state = !led_state;
238238 }
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+ }
239264}
0 commit comments