88 uint8_t axis_0, uint8_t axis_1, uint8_t axis_linear, uint8_t is_clockwise_arc)
90 float center_axis0 = position[axis_0] + offset[axis_0];
91 float center_axis1 = position[axis_1] + offset[axis_1];
92 float r_axis0 = -offset[axis_0];
93 float r_axis1 = -offset[axis_1];
94 float rt_axis0 = target[axis_0] - center_axis0;
95 float rt_axis1 = target[axis_1] - center_axis1;
98 float angular_travel = atan2(r_axis0*rt_axis1-r_axis1*rt_axis0, r_axis0*rt_axis0+r_axis1*rt_axis1);
99 if (is_clockwise_arc) {
109 uint16_t segments = floor(fabs(0.5*angular_travel*radius)/
121 float theta_per_segment = angular_travel/segments;
122 float linear_per_segment = (target[axis_linear] - position[axis_linear])/segments;
150 float cos_T = 2.0 - theta_per_segment*theta_per_segment;
151 float sin_T = theta_per_segment*0.16666667*(cos_T + 4.0);
160 for (i = 1; i<segments; i++) {
164 r_axisi = r_axis0*sin_T + r_axis1*cos_T;
165 r_axis0 = r_axis0*cos_T - r_axis1*sin_T;
171 cos_Ti = cos(i*theta_per_segment);
172 sin_Ti = sin(i*theta_per_segment);
173 r_axis0 = -offset[axis_0]*cos_Ti + offset[axis_1]*sin_Ti;
174 r_axis1 = -offset[axis_0]*sin_Ti - offset[axis_1]*cos_Ti;
179 position[axis_0] = center_axis0 + r_axis0;
180 position[axis_1] = center_axis1 + r_axis1;
181 position[axis_linear] += linear_per_segment;
211 #ifdef LIMITS_TWO_SWITCHES_ON_AXES
224 #ifdef HOMING_SINGLE_AXIS_COMMANDS
231 #ifdef HOMING_CYCLE_1
234 #ifdef HOMING_CYCLE_2
311 #ifdef MESSAGE_PROBE_COORDINATES
350#ifdef ENABLE_PARKING_OVERRIDE_CONTROL
356 sys.override_ctrl = override_state;
#define ARC_ANGULAR_TRAVEL_EPSILON
#define GC_PROBE_CHECK_MODE
#define GC_PROBE_FAIL_END
#define GC_PROBE_FAIL_INIT
#define GC_PARSER_PROBE_IS_AWAY
#define GC_PARSER_PROBE_IS_NO_ERROR
uint8_t limits_get_state()
void limits_go_home(uint8_t cycle_mask)
void limits_soft_check(float *target)
int32_t sys_position[N_AXIS]
int32_t sys_probe_position[N_AXIS]
volatile uint8_t sys_probe_state
volatile uint8_t sys_rt_exec_alarm
volatile uint8_t sys_rt_exec_state
void mc_homing_cycle(uint8_t cycle_mask)
uint8_t mc_probe_cycle(float *target, plan_line_data_t *pl_data, uint8_t parser_flags)
void mc_arc(float *target, plan_line_data_t *pl_data, float *position, float *offset, float radius, uint8_t axis_0, uint8_t axis_1, uint8_t axis_linear, uint8_t is_clockwise_arc)
void mc_dwell(float seconds)
void mc_line(float *target, plan_line_data_t *pl_data)
void mc_parking_motion(float *parking_target, plan_line_data_t *pl_data)
void mc_override_ctrl_update(uint8_t override_state)
void delay_sec(float seconds, uint8_t mode)
#define bit_isfalse(x, mask)
#define bit_istrue(x, mask)
#define bit_false(x, mask)
#define bit_true(x, mask)
void plan_sync_position()
uint8_t plan_buffer_line(float *target, plan_line_data_t *pl_data)
uint8_t plan_check_full_buffer()
#define PL_COND_FLAG_INVERSE_TIME
#define PL_COND_FLAG_SPINDLE_CW
void probe_configure_invert_mask(uint8_t is_probe_away)
uint8_t probe_get_state()
void protocol_exec_rt_system()
void protocol_auto_cycle_start()
void protocol_execute_realtime()
void protocol_buffer_synchronize()
void report_probe_parameters()
#define BITFLAG_SOFT_LIMIT_ENABLE
#define BITFLAG_LASER_MODE
#define spindle_sync(state, rpm)
void st_parking_restore_buffer()
void st_parking_setup_buffer()
void system_set_exec_state_flag(uint8_t mask)
void system_set_exec_alarm(uint8_t code)
#define STEP_CONTROL_EXECUTE_HOLD
#define EXEC_ALARM_HOMING_FAIL_RESET
#define EXEC_ALARM_ABORT_CYCLE
#define EXEC_ALARM_HARD_LIMIT
#define EXEC_ALARM_PROBE_FAIL_INITIAL
#define EXEC_ALARM_PROBE_FAIL_CONTACT
#define STEP_CONTROL_EXECUTE_SYS_MOTION
#define STEP_CONTROL_END_MOTION