Skip to content

Commit 4e24acf

Browse files
committed
Update “2020-08-14”
1 parent 8a243e2 commit 4e24acf

11 files changed

+8213
-7
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
# Swift Pro Firmware V4.8.0 (Base on [Grbl v0.9j](https://github.com/grbl/grbl) )
1+
# Swift Pro Firmware V4.9.0 (Base on [Grbl v0.9j](https://github.com/grbl/grbl) )
22

33
----------
4-
## Update Summary for v4.8.0
4+
## Update Summary for v4.9.0
55

6-
* Fix angle limit error
6+
* Fix M2410 bug
7+
* Add M2413 interface
8+
* Add M2400 S7 work mode
79

810
## Caution
911
#### The current firmware is not perfect and will be updated periodically
-646 KB
Binary file not shown.
913 KB
Binary file not shown.

hex/uArm3Plus_V4.5.0_release_20190924.hex

Lines changed: 3953 additions & 0 deletions
Large diffs are not rendered by default.

hex/uArmPro_V4.9.0_release_20200814.hex

Lines changed: 4152 additions & 0 deletions
Large diffs are not rendered by default.

src/uarm_common.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
#define EEPROM_MODE_ADDR 900U
3434
#define EEPROM_HEIGHT_OFFSET_ADDR 910U
3535
#define EEPROM_FRONT_OFFSET_ADDR 920U
36+
#define EEPROM_USER_HEIGHT_OFFSET_ADDR 930U
37+
#define EEPROM_USER_FRONT_OFFSET_ADDR 940U
38+
3639
#define EEPROM_EFFECT_ANGLE_OFFSET_ADDR 3202U
3740

3841
// <! 600 bytes
@@ -47,6 +50,7 @@ enum uarm_work_mode_e {
4750
WORK_MODE_STEPER_FLAT, // <! flat steper mode
4851
WORK_MODE_STEPER_STANDARD, // <! standard steper mode
4952
WORK_MODE_TOUCH_PEN,
53+
WORK_MODE_USER,
5054
WORK_MODE_TEST,
5155
};
5256

src/uarm_peripheral.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,49 @@ void save_sys_param(void){
406406
}
407407
}
408408

409+
void save_user_endoffest(void)
410+
{
411+
int8_t write_size = 0;
412+
unsigned int write_addr = 0;
413+
char *p = NULL;
414+
415+
p = (char *)(&(uarm.param.front_offset));
416+
write_size = sizeof(uarm.param.front_offset);
417+
write_addr = EEPROM_USER_FRONT_OFFSET_ADDR;
418+
for( ; write_size > 0; write_size-- ){
419+
eeprom_put_char( write_addr++, *(p++) );
420+
}
421+
422+
p = (char *)(&uarm.param.high_offset);
423+
write_size = sizeof(uarm.param.high_offset);
424+
write_addr = EEPROM_USER_HEIGHT_OFFSET_ADDR;
425+
for(;write_size>0;write_size--){
426+
eeprom_put_char(write_addr++,*(p++));
427+
}
428+
429+
}
430+
431+
void read_user_endoffest(void)
432+
{
433+
int8_t read_size = 0;
434+
unsigned int read_addr = 0;
435+
char *p = NULL;
436+
437+
438+
p = (char *)(&(uarm.param.front_offset));
439+
read_size = sizeof(uarm.param.front_offset);
440+
read_addr = EEPROM_USER_FRONT_OFFSET_ADDR;
441+
for( ; read_size > 0; read_size-- ){
442+
*(p++) = eeprom_get_char(read_addr++);
443+
}
444+
445+
p = (char *)(&(uarm.param.high_offset));
446+
read_size = sizeof(uarm.param.high_offset);
447+
read_addr = EEPROM_USER_HEIGHT_OFFSET_ADDR;
448+
for( ; read_size > 0; read_size-- ){
449+
*(p++) = eeprom_get_char(read_addr++);
450+
}
451+
}
409452

410453
void write_sn_num(void){
411454
int8_t write_size = 0;

src/uarm_peripheral.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ void cycle_report_stop(void);
3535

3636
void read_sys_param(void);
3737
void save_sys_param(void);
38+
void save_user_endoffest(void);
39+
void read_user_endoffest(void);
3840
void write_sn_num(void);
3941

4042
void cycle_report_coord(void);

src/uarm_protocol.c

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,7 @@ static bool uarm_cmd_m2241(char *payload){
962962
}
963963

964964
static 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

10271036
static 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

10341058
static 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

10681111
static 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

Comments
 (0)