@@ -962,6 +962,7 @@ static bool uarm_cmd_m2241(char *payload){
962962}
963963
964964static void uarm_cmd_m2400 (uint8_t param ){ // <! set work mode
965+ char h_str [20 ],s_str [20 ];
965966 switch (param ){
966967 case WORK_MODE_NORMAL : // <! nomal mode
967968 end_effector_deinit ();
@@ -1007,7 +1008,15 @@ static void uarm_cmd_m2400(uint8_t param){ // <! set work mode
10071008 uarm .param .high_offset = DEFAULT_ROUND_PEN_HEIGHT ;
10081009 uarm .param .front_offset = DEFAULT_ROUND_PEN_FRONT ;
10091010 break ;
1010- case 7 :
1011+ case WORK_MODE_USER :
1012+ end_effector_deinit ();
1013+ uarm .param .work_mode = WORK_MODE_USER ;
1014+ read_user_endoffest ();
1015+ // dtostf(uarm.param.high_offset,5,4,h_str);
1016+ // dtostf(uarm.param.front_offset,5,4,s_str);
1017+ // sprintf( tail_report_str, " H%s S%s R%s\n", h_str, s_str);
1018+ break ;
1019+ case 8 :
10111020 end_effector_deinit ();
10121021 uarm .param .work_mode = WORK_MODE_TEST ;
10131022 uarm .param .high_offset = DEFAULT_TEST_HEIGHT ;
@@ -1026,9 +1035,24 @@ static void uarm_cmd_m2401(void){ // <! single reference
10261035
10271036static void uarm_cmd_m2410 (void ){
10281037 float x , y , z ;
1029- step_to_coord ( sys .position [X_AXIS ], sys .position [Y_AXIS ], sys .position [Z_AXIS ], & x , & y , & z ); // calculate the current coord
1038+ // step_to_coord( sys.position[X_AXIS], sys.position[Y_AXIS], sys.position[Z_AXIS], &x, &y, &z); // calculate the current coord
1039+ float angle_l = 0 , angle_r = 0 , angle_b = 0 ;
1040+ char z_str [20 ] = {0 };
1041+
1042+ angle_l = calculate_current_angle (CHANNEL_ARML ); // <! calculate init angle
1043+ angle_r = calculate_current_angle (CHANNEL_ARMR );
1044+ angle_b = calculate_current_angle (CHANNEL_BASE )- 90 ;
1045+ //angle_e = end_effector_get_angle();
1046+
1047+ angle_to_coord ( angle_l , angle_r , angle_b , & x , & y , & z );
10301048 uarm .param .high_offset = z ;
1049+
1050+ // dtostrf( z, 5, 4, z_str );
1051+ //
1052+ //
1053+ // sprintf( tail_report_str, " H%s\n", z_str );
10311054 save_sys_param ();
1055+ save_user_endoffest ();
10321056}
10331057
10341058static bool uarm_cmd_m2411 (char * payload ){
@@ -1043,6 +1067,8 @@ static bool uarm_cmd_m2411(char *payload){
10431067 if ( !read_float (offset_str , NULL , & front_offset ) ){ return false; }
10441068 uarm .param .front_offset = front_offset ;
10451069 save_sys_param ();
1070+
1071+ save_user_endoffest ();
10461072 return true;
10471073 }
10481074}
@@ -1064,6 +1090,23 @@ static bool uarm_cmd_m2412(char *payload){
10641090 }
10651091}
10661092
1093+ static bool uarm_cmd_m2413 (char * payload ){
1094+ float heigth_offset = 0 ;
1095+ char offset_str [20 ] = {0 };
1096+
1097+ uint8_t rtn = 0 ;
1098+ if ( rtn = sscanf (payload , "H%[0-9-+.]" , offset_str ) < 1 ){
1099+ DB_PRINT_STR ( "sscanf %d\r\n" , rtn );
1100+ return false;
1101+ }else {
1102+ if ( !read_float (offset_str , NULL , & heigth_offset ) ){ return false; }
1103+ uarm .param .high_offset = heigth_offset ;
1104+ save_sys_param ();
1105+
1106+ save_user_endoffest ();
1107+ return true;
1108+ }
1109+ }
10671110
10681111static void uarm_cmd_m2420 (uint8_t param ){
10691112// multi_point_reference(param);
@@ -1256,7 +1299,7 @@ enum uarm_protocol_e uarm_execute_m_cmd(uint16_t cmd, char *line, uint8_t *char_
12561299 //DB_PRINT_STR( "M2307\r\n" );
12571300 break ;
12581301 case 2400 :
1259- if ( (line [0 ]== 'S' ) && (line [1 ]>='0' && line [1 ]<='7 ' ) ){
1302+ if ( (line [0 ]== 'S' ) && (line [1 ]>='0' && line [1 ]<='8 ' ) ){
12601303 uarm_cmd_m2400 ( line [1 ]- '0' );
12611304 return UARM_CMD_OK ;
12621305 }else { return UARM_CMD_ERROR ; }
@@ -1284,6 +1327,13 @@ enum uarm_protocol_e uarm_execute_m_cmd(uint16_t cmd, char *line, uint8_t *char_
12841327 return UARM_CMD_ERROR ;
12851328 }
12861329 break ;
1330+ case 2413 :
1331+ if ( uarm_cmd_m2413 (line ) == true ){
1332+ return UARM_CMD_OK ;
1333+ }else {
1334+ return UARM_CMD_ERROR ;
1335+ }
1336+ break ;
12871337 case 2500 :
12881338 if ( uarm_cmd_m2500 () == true ){
12891339 return UARM_CMD_OK ;
0 commit comments