}
}else if( gcode->has_letter('M')){
switch( (int) gcode->get_value('M') ){
- case 114: gcode->stream->printf("C: X:%1.3f Y:%1.3f Z:%1.3f\n",
+ case 92: // M92 - set steps per mm
+ double steps[3];
+ this->arm_solution->get_steps_per_millimeter(steps);
+ if (gcode->has_letter('X'))
+ steps[0] = this->to_millimeters(gcode->get_value('X'));
+ if (gcode->has_letter('Y'))
+ steps[1] = this->to_millimeters(gcode->get_value('Y'));
+ if (gcode->has_letter('Z'))
+ steps[2] = this->to_millimeters(gcode->get_value('Z'));
+ this->arm_solution->set_steps_per_millimeter(steps);
+ // update current position in steps
+ this->arm_solution->millimeters_to_steps(this->current_position, this->kernel->planner->position);
+ gcode->stream->printf("X:%g Y:%g Z:%g ", steps[0], steps[1], steps[2]);
+ gcode->add_nl = true;
+ return;
+ case 114: gcode->stream->printf("C: X:%1.3f Y:%1.3f Z:%1.3f\n",
this->current_position[0],
this->current_position[1],
this->current_position[2]);
BaseSolution();
virtual void millimeters_to_steps( double millimeters[], int steps[] ) = 0;
virtual void steps_to_millimeters( int steps[], double millimeters[] ) = 0;
+
+ virtual void set_steps_per_millimeter( double steps[] ) = 0;
+ virtual void get_steps_per_millimeter( double steps[] ) = 0;
};
#endif
millimeters[BETA_STEPPER ] = steps[Y_AXIS] / this->beta_steps_per_mm;
millimeters[GAMMA_STEPPER] = steps[X_AXIS] / this->gamma_steps_per_mm;
}
+
+void CartesianSolution::set_steps_per_millimeter( double steps[] )
+{
+ this->alpha_steps_per_mm = steps[0];
+ this->beta_steps_per_mm = steps[1];
+ this->gamma_steps_per_mm = steps[2];
+}
+
+void CartesianSolution::get_steps_per_millimeter( double steps[] )
+{
+ steps[0] = this->alpha_steps_per_mm;
+ steps[1] = this->beta_steps_per_mm;
+ steps[2] = this->gamma_steps_per_mm;
+}
void millimeters_to_steps( double millimeters[], int steps[] );
void steps_to_millimeters( int steps[], double millimeters[] );
+ void set_steps_per_millimeter( double steps[] );
+ void get_steps_per_millimeter( double steps[] );
+
Config* config;
double alpha_steps_per_mm;
double beta_steps_per_mm;
if( gcode->m == 82 ){ this->absolute_mode = true; }
if( gcode->m == 83 ){ this->absolute_mode = false; }
if( gcode->m == 84 ){ this->en_pin->set(1); }
+ if (gcode->m == 92 )
+ {
+ if (gcode->has_letter('E'))
+ {
+ this->steps_per_millimeter = gcode->get_value('E');
+ this->current_steps = int(floor(this->steps_per_millimeter * this->current_position));
+ }
+ gcode->stream->printf("E:%g ", this->steps_per_millimeter);
+ gcode->add_nl = true;
+ }
}
// The mode is OFF by default, and SOLO or FOLLOW only if we need to extrude