@@ -76,6 +76,18 @@ void uArmClass::alert(byte times, byte runTime, byte stopTime)
7676void uArmClass::writeAngle (double servo_rot_angle, double servo_left_angle, double servo_right_angle, double servo_hand_rot_angle)
7777{
7878 attachAll ();
79+ writeAngle (servo_rot_angle, servo_left_angle, servo_right_angle);
80+ writeServoAngle (SERVO_HAND_ROT_NUM,servo_hand_rot_angle,true );
81+ cur_hand = servo_hand_rot_angle;
82+ }
83+
84+ void uArmClass::writeAngle (double servo_rot_angle, double servo_left_angle, double servo_right_angle)
85+ {
86+ // attachAll();
87+
88+ attachServo (SERVO_ROT_NUM);
89+ attachServo (SERVO_LEFT_NUM);
90+ attachServo (SERVO_RIGHT_NUM);
7991
8092 if (servo_left_angle < 10 ) servo_left_angle = 10 ;
8193 if (servo_left_angle > 120 ) servo_left_angle = 120 ;
@@ -90,14 +102,14 @@ void uArmClass::writeAngle(double servo_rot_angle, double servo_left_angle, doub
90102 writeServoAngle (SERVO_ROT_NUM,servo_rot_angle,true );
91103 writeServoAngle (SERVO_LEFT_NUM,servo_left_angle,true );
92104 writeServoAngle (SERVO_RIGHT_NUM,servo_right_angle,true );
93- writeServoAngle (SERVO_HAND_ROT_NUM,servo_hand_rot_angle,true );
105+ // writeServoAngle(SERVO_HAND_ROT_NUM,servo_hand_rot_angle,true);
94106
95107
96108 // refresh logical servo angle cache
97109 cur_rot = servo_rot_angle;
98110 cur_left = servo_left_angle;
99111 cur_right = servo_right_angle;
100- cur_hand = servo_hand_rot_angle;
112+ // cur_hand = servo_hand_rot_angle;
101113}
102114
103115/* Write the angle to Servo
@@ -487,15 +499,20 @@ void uArmClass::calXYZ()
487499 }
488500}
489501
490- int uArmClass::moveToOpts (double x, double y, double z, double hand_angle, byte relative_flags, double time, byte path_type, byte ease_type) {
502+ int uArmClass::moveToOpts (double x, double y, double z, double hand_angle, byte relative_flags, double time, byte path_type, byte ease_type, boolean enable_hand ) {
491503 float limit = sqrt ((x*x + y*y));
492504 if (limit > 32 )
493505 {
494506 float k = 32 /limit;
495507 x = x * k;
496508 y = y * k;
497509 }
498- attachAll ();
510+ // attachAll();
511+ attachServo (SERVO_ROT_NUM);
512+ attachServo (SERVO_LEFT_NUM);
513+ attachServo (SERVO_RIGHT_NUM);
514+ if (enable_hand)
515+ attachServo (SERVO_HAND_ROT_NUM);
499516
500517 // find current position using cached servo values
501518 double current_x;
@@ -552,8 +569,10 @@ int uArmClass::moveToOpts(double x, double y, double z, double hand_angle, byte
552569
553570 for (byte i = 0 ; i < INTERP_INTVLS; i++)
554571 {
555-
572+ if (enable_hand)
556573 writeAngle (rot_array[i], left_array[i], right_array[i], hand_array[i]);
574+ else
575+ writeAngle (rot_array[i], left_array[i], right_array[i]);
557576 // writeServoAngle(SERVO_ROT_NUM, rot_array[i], true);
558577 // writeServoAngle(SERVO_LEFT_NUM, left_array[i],true);
559578 // writeServoAngle(SERVO_RIGHT_NUM, right_array[i],true);
@@ -588,7 +607,10 @@ int uArmClass::moveToOpts(double x, double y, double z, double hand_angle, byte
588607 // writeLeftRightServoAngle(left, right, true);
589608 // if(enable_hand)
590609 // writeServoAngle(SERVO_HAND_ROT_NUM, hand_array[i], true);
591- writeAngle (rot, left, right, hand_array[i]);
610+ if (enable_hand)
611+ writeAngle (rot, left, right, hand_array[i]);
612+ else
613+ writeAngle (rot, left, right);
592614 delay (time * 1000 / INTERP_INTVLS);
593615 }
594616 }
@@ -600,7 +622,10 @@ int uArmClass::moveToOpts(double x, double y, double z, double hand_angle, byte
600622 // writeServoAngle(SERVO_RIGHT_NUM, tgt_right, true);
601623 // writeLeftRightServoAngle(tgt_left, tgt_right, true);
602624 // writeServoAngle(SERVO_HAND_ROT_NUM, hand_angle, true);
603- writeAngle (tgt_rot, tgt_left, tgt_right, hand_angle);
625+ if (enable_hand)
626+ writeAngle (tgt_rot, tgt_left, tgt_right, hand_angle);
627+ else
628+ writeAngle (tgt_rot, tgt_left, tgt_right);
604629}
605630
606631double uArmClass::calYonly (double theta_1, double theta_2, double theta_3)
0 commit comments