#define laser_module_pin_checksum CHECKSUM("laser_module_pin")
#define laser_module_pwm_period_checksum CHECKSUM("laser_module_pwm_period")
#define laser_module_max_power_checksum CHECKSUM("laser_module_max_power")
+#define laser_module_min_power_checksum CHECKSUM("laser_module_min_power")
#define laser_module_tickle_power_checksum CHECKSUM("laser_module_tickle_power")
+#define laser_module_power_checksum CHECKSUM("laser_module_power")
Laser::Laser(){
}
this->laser_pin->period_us(THEKERNEL->config->value(laser_module_pwm_period_checksum)->by_default(20)->as_number());
this->laser_pin->write(this->laser_inverting ? 1 : 0);
- this->laser_max_power = THEKERNEL->config->value(laser_module_max_power_checksum )->by_default(0.8f)->as_number() ;
- this->laser_tickle_power = THEKERNEL->config->value(laser_module_tickle_power_checksum)->by_default(0 )->as_number() ;
+ this->laser_max_power = THEKERNEL->config->value(laser_module_max_power_checksum )->by_default(1.0f)->as_number() ;
+ this->laser_min_power = THEKERNEL->config->value(laser_module_min_power_checksum)->by_default(0 )->as_number() ;
+ this->laser_power = THEKERNEL->config->value(laser_module_power_checksum)->by_default(0.8f)->as_number() ;
+
+ // either the minimum value wasnt set, or it is 0. Overwrite with old tickle value config.
+ if (this->laser_min_power == 0) {
+ this->laser_min_power = THEKERNEL->config->value(laser_module_tickle_power_checksum)->by_default(0 )->as_number() ;
+ }
//register for events
this->register_for_event(ON_GCODE_EXECUTE);
if( gcode->has_g){
int code = gcode->g;
if( code == 0 ){ // G0
- this->laser_pin->write(this->laser_inverting ? 1 - this->laser_tickle_power : this->laser_tickle_power);
+ this->laser_pin->write(this->laser_inverting ? 1 - this->laser_min_power : this->laser_min_power);
this->laser_on = false;
}else if( code >= 1 && code <= 3 ){ // G1, G2, G3
this->laser_on = true;
}
}
if ( gcode->has_letter('S' )){
- this->laser_max_power = gcode->get_value('S');
-// THEKERNEL->streams->printf("Adjusted laser power to %d/100\r\n",(int)(this->laser_max_power*100.0+0.5));
+ this->laser_power = gcode->get_value('S');
}
}
void Laser::set_proportional_power(){
if( this->laser_on && THEKERNEL->stepper->get_current_block() ){
// adjust power to maximum power and actual velocity
- float proportional_power = float(float(this->laser_max_power) * float(THEKERNEL->stepper->get_trapezoid_adjusted_rate()) / float(THEKERNEL->stepper->get_current_block()->nominal_rate));
+ float proportional_power = (((this->laser_max_power-this->laser_min_power)*(this->laser_power * THEKERNEL->stepper->get_trapezoid_adjusted_rate() / THEKERNEL->stepper->get_current_block()->nominal_rate))+this->laser_min_power);
this->laser_pin->write(this->laser_inverting ? 1 - proportional_power : proportional_power);
}
}