예제 #1
0
// 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();

}
예제 #2
0
파일: gcode.c 프로젝트: Sagittarii/stepper
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;
    }
}