@@ -12,15 +12,18 @@ uArmClass uarm;
1212
1313uArmClass::uArmClass ()
1414{
15-
1615}
1716
1817void uArmClass::init ()
1918{
20- set_servo_status (true , SERVO_ROT_NUM );
21- set_servo_status (true , SERVO_LEFT_NUM );
22- set_servo_status (true , SERVO_RIGHT_NUM );
23- set_servo_status (true , SERVO_HAND_ROT_NUM );
19+ if (EEPROM .read (CALIBRATION_FLAG ) != CONFIRM_FLAG )
20+ {
21+ alert (50 , 10 , 10 );
22+ }
23+ set_servo_status (true , SERVO_ROT_NUM );
24+ set_servo_status (true , SERVO_LEFT_NUM );
25+ set_servo_status (true , SERVO_RIGHT_NUM );
26+ set_servo_status (true , SERVO_HAND_ROT_NUM );
2427}
2528
2629/* !
@@ -65,10 +68,6 @@ int uArmClass::write_servo_angle(double servo_rot_angle, double servo_left_angle
6568 */
6669int uArmClass::write_servo_angle (double servo_rot_angle, double servo_left_angle, double servo_right_angle)
6770{
68- // setServoStatus(true, SERVO_ROT_NUM);
69- // setServoStatus(true, SERVO_LEFT_NUM);
70- // setServoStatus(true, SERVO_RIGHT_NUM);
71-
7271 if (servo_left_angle < 10 ) servo_left_angle = 10 ;
7372 if (servo_left_angle > 120 ) servo_left_angle = 120 ;
7473 if (servo_right_angle < 10 ) servo_right_angle = 10 ;
@@ -135,25 +134,10 @@ void uArmClass::write_left_right_servo_angle(double servo_left_angle, double ser
135134 alert (1 , 10 , 0 );
136135 return ;
137136 }
138- // attach_servo(SERVO_LEFT_NUM);
139- // attach_servo(SERVO_RIGHT_NUM);
140137 g_servo_left.write (servo_left_angle);
141138 g_servo_right.write (servo_right_angle);
142139}
143140
144- /* !
145- \brief Attach All Servo
146- \note Warning, if you attach left servo & right servo without a movement, it might be caused a demage
147- */
148- // void uArmClass::attach_all()
149- // {
150- // attach_servo(SERVO_ROT_NUM);
151- // attach_servo(SERVO_LEFT_NUM);
152- // attach_servo(SERVO_RIGHT_NUM);
153- // attach_servo(SERVO_HAND_ROT_NUM);
154- // }
155-
156-
157141/* !
158142 \brief Attach Servo, if servo has not been attached, attach the servo, and read the current Angle
159143 \param servo number SERVO_ROT_NUM, SERVO_LEFT_NUM, SERVO_RIGHT_NUM, SERVO_HAND_ROT_NUM
@@ -162,42 +146,70 @@ boolean uArmClass::set_servo_status(boolean setAttached, byte servoNum){
162146 // Attach or detach a servo, and set the position instantly after doing so to prevent "snap"
163147 // Returns true or false if the servo was a valid number
164148 // Serial.println("Starting new func");
165-
149+ boolean is_linear_calibrated = false ;
150+ if (EEPROM .read (CALIBRATION_LINEAR_FLAG ) == CONFIRM_FLAG )
151+ {
152+ is_linear_calibrated = true ;
153+ }
166154 double angleBefore = 90 ;
167155 if (servoNum == SERVO_ROT_NUM ) {
168156 if (setAttached) {
169- angleBefore = read_servo_angle (SERVO_ROT_NUM );
170- // Serial.println("New angle" + String(angleBefore));
171- uarm.g_servo_rot .attach (SERVO_ROT_PIN );
172- uarm.g_servo_rot .write (angleBefore);
173- cur_rot = angleBefore;
157+ if (is_linear_calibrated == true ) {
158+ angleBefore = read_servo_angle (SERVO_ROT_NUM );
159+ // Serial.println("New angle" + String(angleBefore));
160+ uarm.g_servo_rot .attach (SERVO_ROT_PIN );
161+ uarm.g_servo_rot .write (angleBefore);
162+ cur_rot = angleBefore;
163+ }
164+ else {
165+ uarm.g_servo_rot .attach (SERVO_ROT_PIN );
166+ uarm.g_servo_rot .write (90 );
167+ }
174168 }else {
175169 uarm.g_servo_rot .detach ();
176170 }
177171 }else if (servoNum == SERVO_LEFT_NUM ) {
178172 if (setAttached) {
179- angleBefore = uarm.read_servo_angle (SERVO_LEFT_NUM );
180- uarm.g_servo_left .attach (SERVO_LEFT_PIN );
181- uarm.g_servo_left .write (angleBefore);
182- cur_left = angleBefore;
173+ if (is_linear_calibrated == true ) {
174+ angleBefore = uarm.read_servo_angle (SERVO_LEFT_NUM );
175+ uarm.g_servo_left .attach (SERVO_LEFT_PIN );
176+ uarm.g_servo_left .write (angleBefore);
177+ cur_left = angleBefore;
178+ }
179+ else {
180+ uarm.g_servo_left .attach (SERVO_LEFT_PIN );
181+ uarm.g_servo_left .write (100 );
182+ }
183183 }else {
184184 uarm.g_servo_left .detach ();
185185 }
186186 }else if (servoNum == SERVO_RIGHT_NUM ) {
187187 if (setAttached) {
188- angleBefore = uarm.read_servo_angle (SERVO_RIGHT_NUM );
189- uarm.g_servo_right .attach (SERVO_RIGHT_PIN );
190- uarm.g_servo_right .write (angleBefore);
191- cur_right = angleBefore;
188+ if (is_linear_calibrated == true ) {
189+ angleBefore = uarm.read_servo_angle (SERVO_RIGHT_NUM );
190+ uarm.g_servo_right .attach (SERVO_RIGHT_PIN );
191+ uarm.g_servo_right .write (angleBefore);
192+ cur_right = angleBefore;
193+ }
194+ else {
195+ uarm.g_servo_right .attach (SERVO_RIGHT_PIN );
196+ uarm.g_servo_right .write (60 );
197+ }
192198 }else {
193199 uarm.g_servo_right .detach ();
194200 }
195201 }else if (servoNum == SERVO_HAND_ROT_NUM ) {
196202 if (setAttached) {
197- angleBefore = uarm.read_servo_angle (SERVO_HAND_ROT_NUM );
198- uarm.g_servo_hand_rot .attach (SERVO_HAND_PIN );
199- uarm.g_servo_hand_rot .write (angleBefore);
200- cur_hand = angleBefore;
203+ if (is_linear_calibrated == true ) {
204+ angleBefore = uarm.read_servo_angle (SERVO_HAND_ROT_NUM );
205+ uarm.g_servo_hand_rot .attach (SERVO_HAND_PIN );
206+ uarm.g_servo_hand_rot .write (angleBefore);
207+ cur_hand = angleBefore;
208+ }
209+ else {
210+ uarm.g_servo_hand_rot .attach (SERVO_HAND_PIN );
211+ uarm.g_servo_hand_rot .write (90 );
212+ }
201213 }else {
202214 uarm.g_servo_hand_rot .detach ();
203215 }
@@ -265,30 +277,30 @@ double uArmClass::read_servo_angle(byte servo_num)
265277double uArmClass::read_servo_angle (byte servo_num, boolean withOffset)
266278{
267279 double angle = 0 ;
268- for (byte i = 0 ; i < 5 ; i++){
269- switch (servo_num)
270- {
271- case SERVO_ROT_NUM :
272- angle += analog_to_angle (analogRead (SERVO_ROT_ANALOG_PIN ),SERVO_ROT_NUM ,withOffset);
273- break ;
274-
275- case SERVO_LEFT_NUM :
276- angle += analog_to_angle (analogRead (SERVO_LEFT_ANALOG_PIN ),SERVO_LEFT_NUM ,withOffset);
277- break ;
278-
279- case SERVO_RIGHT_NUM :
280- angle += analog_to_angle (analogRead (SERVO_RIGHT_ANALOG_PIN ),SERVO_RIGHT_NUM ,withOffset);
281- break ;
282-
283- case SERVO_HAND_ROT_NUM :
284- angle += analog_to_angle (analogRead (SERVO_HAND_ROT_ANALOG_PIN ),SERVO_HAND_ROT_NUM ,withOffset);
285- break ;
286-
287- default :
288- break ;
289-
290- }
291- delay (10 );
280+ for (byte i = 0 ; i < 5 ; i++) {
281+ switch (servo_num)
282+ {
283+ case SERVO_ROT_NUM :
284+ angle += analog_to_angle (analogRead (SERVO_ROT_ANALOG_PIN ),SERVO_ROT_NUM ,withOffset);
285+ break ;
286+
287+ case SERVO_LEFT_NUM :
288+ angle += analog_to_angle (analogRead (SERVO_LEFT_ANALOG_PIN ),SERVO_LEFT_NUM ,withOffset);
289+ break ;
290+
291+ case SERVO_RIGHT_NUM :
292+ angle += analog_to_angle (analogRead (SERVO_RIGHT_ANALOG_PIN ),SERVO_RIGHT_NUM ,withOffset);
293+ break ;
294+
295+ case SERVO_HAND_ROT_NUM :
296+ angle += analog_to_angle (analogRead (SERVO_HAND_ROT_ANALOG_PIN ),SERVO_HAND_ROT_NUM ,withOffset);
297+ break ;
298+
299+ default :
300+ break ;
301+
302+ }
303+ delay (10 );
292304 }
293305 return angle/5 ;
294306}
@@ -425,15 +437,16 @@ void uArmClass::coordinate_to_angle(double x, double y, double z, double& theta_
425437 \param armHeight Height from -150 to 150
426438 */
427439void uArmClass::write_stretch_height (double armStretch, double armHeight){
428- if (EEPROM .read (CALIBRATION_STRETCH_FLAG ) != CONFIRM_FLAG ) {
429- alert (3 , 200 , 200 );
430- return ;
431- }
432440 double offsetL = 0 ;
433441 double offsetR = 0 ;
434-
435- EEPROM .get (OFFSET_STRETCH_START_ADDRESS , offsetL);
436- EEPROM .get (OFFSET_STRETCH_START_ADDRESS + 4 , offsetR);
442+ if (EEPROM .read (CALIBRATION_STRETCH_FLAG ) != CONFIRM_FLAG ) {
443+ offsetL = -10 ;
444+ offsetR = -10 ;
445+ }
446+ else {
447+ EEPROM .get (OFFSET_STRETCH_START_ADDRESS , offsetL);
448+ EEPROM .get (OFFSET_STRETCH_START_ADDRESS + 4 , offsetR);
449+ }
437450 armStretch = constrain (armStretch, ARM_STRETCH_MIN , ARM_STRETCH_MAX ) + 68 ;
438451 armHeight = constrain (armHeight, ARM_HEIGHT_MIN , ARM_HEIGHT_MAX );
439452 double xx = armStretch*armStretch + armHeight*armHeight;
@@ -476,7 +489,7 @@ void uArmClass::get_current_xyz(double theta_1, double theta_2, double theta_3)
476489 \param end_val End Position
477490 \param interp_vals interpolation array
478491 \param ease_type INTERP_EASE_INOUT_CUBIC, INTERP_LINEAR, INTERP_EASE_INOUT, INTERP_EASE_IN, INTERP_EASE_OUT
479- */
492+ */
480493void uArmClass::interpolate (double start_val, double end_val, double *interp_vals, byte ease_type) {
481494 double delta = end_val - start_val;
482495 for (byte f = 0 ; f < INTERP_INTVLS ; f++) {
@@ -527,7 +540,7 @@ void uArmClass::interpolate(double start_val, double end_val, double *interp_val
527540 \param path_type PATH_LINEAR, PATH_ANGLES
528541 \param enable_hand Enable Hand Axis
529542 \return SUCCESS, FAILED
530- */
543+ */
531544int uArmClass::move_to (double x, double y, double z, double hand_angle, byte relative_flags, double time, byte path_type, byte ease_type, boolean enable_hand) {
532545 float limit = sqrt ((x*x + y*y));
533546 if (limit > 32 )
@@ -642,7 +655,7 @@ int uArmClass::move_to(double x, double y, double z, double hand_angle, byte rel
642655 \param theta_2
643656 \param theta_3
644657 \return Y Axis Value
645- */
658+ */
646659double uArmClass::angle_to_coordinate_y (double theta_1, double theta_2, double theta_3)
647660{
648661 double l5_2 = (MATH_L2 + MATH_L3 *cos (theta_2 / MATH_TRANS ) + MATH_L4 *cos (theta_3 / MATH_TRANS ));
@@ -652,7 +665,7 @@ double uArmClass::angle_to_coordinate_y(double theta_1, double theta_2, double t
652665
653666/* !
654667 \brief Close Gripper
655- */
668+ */
656669void uArmClass::gripper_catch ()
657670{
658671 pinMode (GRIPPER , OUTPUT );
@@ -662,7 +675,7 @@ void uArmClass::gripper_catch()
662675
663676/* !
664677 \brief Release Gripper
665- */
678+ */
666679void uArmClass::gripper_release ()
667680{
668681 if (g_gripper_reset)
@@ -675,7 +688,7 @@ void uArmClass::gripper_release()
675688
676689/* !
677690 \brief Turn on Pump
678- */
691+ */
679692void uArmClass::pump_on ()
680693{
681694
@@ -687,7 +700,7 @@ void uArmClass::pump_on()
687700
688701/* !
689702 \brief Turn off Pump
690- */
703+ */
691704void uArmClass::pump_off ()
692705{
693706 pinMode (PUMP_EN , OUTPUT );
0 commit comments