@@ -54,6 +54,32 @@ void uArmClass::alert(byte times, byte runTime, byte stopTime)
5454 }
5555}
5656
57+ void uArmClass::writeAngle (double servo_rot_angle, double servo_left_angle, double servo_right_angle, double servo_hand_rot_angle)
58+ {
59+ attachAll ();
60+
61+ if (servo_left_angle < 10 ) servo_left_angle = 10 ;
62+ if (servo_left_angle > 120 ) servo_left_angle = 120 ;
63+ if (servo_right_angle < 10 ) servo_right_angle = 10 ;
64+ if (servo_right_angle > 110 ) servo_right_angle = 110 ;
65+
66+ if (servo_left_angle + servo_right_angle > 160 )
67+ {
68+ servo_right_angle = 160 - servo_left_angle;
69+ return ;
70+ }
71+ writeServoAngle (SERVO_ROT_NUM ,servo_rot_angle,true );
72+ writeServoAngle (SERVO_LEFT_NUM ,servo_left_angle,true );
73+ writeServoAngle (SERVO_RIGHT_NUM ,servo_right_angle,true );
74+ writeServoAngle (SERVO_HAND_ROT_NUM ,servo_hand_rot_angle,true );
75+
76+
77+ // refresh logical servo angle cache
78+ cur_rot = servo_rot_angle;
79+ cur_left = servo_left_angle;
80+ cur_right = servo_right_angle;
81+ cur_hand = servo_hand_rot_angle;
82+ }
5783
5884/* Write the angle to Servo
5985* servo_number - SERVO_ROT_NUM, SERVO_LEFT_NUM, SERVO_RIGHT_NUM, SERVO_HAND_ROT_NUM
@@ -487,12 +513,12 @@ void uArmClass::calXYZ()
487513 for (byte i = 0 ; i < INTERP_INTVLS ; i++)
488514 {
489515
490- // writeAngle(rot_array[i], left_array[i], right_array[i], hand_array[i]);
491- writeServoAngle (SERVO_ROT_NUM , rot_array[i], true );
516+ writeAngle (rot_array[i], left_array[i], right_array[i], hand_array[i]);
517+ // writeServoAngle(SERVO_ROT_NUM, rot_array[i], true);
492518 // writeServoAngle(SERVO_LEFT_NUM, left_array[i],true);
493519 // writeServoAngle(SERVO_RIGHT_NUM, right_array[i],true);
494- writeLeftRightServoAngle (left_array[i], right_array[i], true );
495- writeServoAngle (SERVO_HAND_ROT_NUM , hand_array[i],true );
520+ // writeLeftRightServoAngle(left_array[i], right_array[i], true);
521+ // writeServoAngle(SERVO_HAND_ROT_NUM, hand_array[i],true);
496522 delay (time * 1000 / INTERP_INTVLS );
497523 }
498524 } else if (path_type == PATH_LINEAR ) {
@@ -516,25 +542,25 @@ void uArmClass::calXYZ()
516542 // Serial.println(left);
517543 // Serial.println(right);
518544 // Serial.println();
519- writeServoAngle (SERVO_ROT_NUM , rot,true );
545+ // writeServoAngle(SERVO_ROT_NUM, rot,true);
520546 // writeServoAngle(SERVO_LEFT_NUM, tgt_left,true);
521547 // writeServoAngle(SERVO_RIGHT_NUM, tgt_right,true);
522- writeLeftRightServoAngle (left, right, true );
548+ // writeLeftRightServoAngle(left, right, true);
523549 // if(enable_hand)
524- writeServoAngle (SERVO_HAND_ROT_NUM , hand_array[i], true );
525- // writeAngle(rot, left, right, hand_array[i]);
550+ // writeServoAngle(SERVO_HAND_ROT_NUM, hand_array[i], true);
551+ writeAngle (rot, left, right, hand_array[i]);
526552 delay (time * 1000 / INTERP_INTVLS );
527553 }
528554 }
529555 }
530556
531557 // set final target position at end of interpolation or "atOnce"
532- writeServoAngle (SERVO_ROT_NUM , tgt_rot, true );
558+ // writeServoAngle(SERVO_ROT_NUM, tgt_rot, true);
533559 // writeServoAngle(SERVO_LEFT_NUM, tgt_left, true);
534560 // writeServoAngle(SERVO_RIGHT_NUM, tgt_right, true);
535- writeLeftRightServoAngle (tgt_left, tgt_right, true );
536- writeServoAngle (SERVO_HAND_ROT_NUM , hand_angle, true );
537- // writeAngle(tgt_rot, tgt_left, tgt_right, hand_angle);
561+ // writeLeftRightServoAngle(tgt_left, tgt_right, true);
562+ // writeServoAngle(SERVO_HAND_ROT_NUM, hand_angle, true);
563+ writeAngle (tgt_rot, tgt_left, tgt_right, hand_angle);
538564 }
539565
540566 double uArmClass::calYonly (double theta_1, double theta_2, double theta_3)
0 commit comments