// init stepper. void stepper_init() { // init button. pinMode(BTN_0, INPUT_PULLUP); // use a4988. pinMode(STEPPER_EN, OUTPUT); digitalWrite(STEPPER_EN, HIGH); pinMode(STEPPER_STEP, OUTPUT); digitalWrite(STEPPER_STEP, HIGH); pinMode(STEPPER_DIR, OUTPUT); digitalWrite(STEPPER_DIR, HIGH); pinMode(MS_1, OUTPUT); pinMode(MS_2, OUTPUT); pinMode(MS_3, OUTPUT); digitalWrite(MS_1, HIGH); digitalWrite(MS_2, HIGH); digitalWrite(MS_3, HIGH); // reset stepper to right side. stepper_reset(); }
void processGCode(const cmd_param param) { switch ((int)param.g) { case 0: // G0 = Rapid move // Handle G0 as G1 (so no break here) case 1: // G1 = Controlled move if (param.f_set && (param.f != 0.0) ) { stepper_set_feedrate(AXIS_X, param.f); stepper_set_feedrate(AXIS_Y, param.f); stepper_set_feedrate(AXIS_Z, param.f); stepper_set_feedrate(AXIS_E, param.f); } if ( param.x_set || param.y_set || param.z_set || param.e_set ) { float pos[AXIS_NUM] = {param.x, param.y, param.z, param.e}; bool set[AXIS_NUM] = {param.x_set, param.y_set, param.z_set, param.e_set}; stepper_move(pos, set); } else { puts("ok\n"); } break; case 4: // G4 = Dwell puts("ok\n"); break; case 10: // G10 = Head Offset puts("ok\n"); break; case 20: // G20 = Set Units to Inches /// \todo to handle puts("!!\n"); // Send Command Fail to block the system break; case 21: // G21 = Set Units to Millimeters /// \todo to handle puts("ok\n"); break; case 28: // G28 = Move to Origin stepper_reset(); /// \todo change to real move to origin puts("ok\n"); break; case 29: case 30: case 31: case 32: // G29-32 = Bed probing puts("ok\n"); break; case 90: // G90 = Set to Absolute Positioning stepper_set_absolute(AXIS_X); stepper_set_absolute(AXIS_Y); stepper_set_absolute(AXIS_Z); puts("ok\n"); break; case 91: // G91 = Set to Relative Positioning stepper_set_relative(AXIS_X); stepper_set_relative(AXIS_Y); stepper_set_relative(AXIS_Z); puts("ok\n"); break; case 92: // G92 = Set Position if (param.x_set) { stepper_set_position(AXIS_X, param.x); } if (param.y_set) { stepper_set_position(AXIS_Y, param.y); } if (param.z_set) { stepper_set_position(AXIS_Z, param.z); } if (param.e_set) { stepper_set_position(AXIS_E, param.e); } puts("ok\n"); break; default: puts("ok\n"); break; } }