ExtruderScreen::ExtruderScreen()
{
- this->command= nullptr;
}
void ExtruderScreen::on_enter()
{
switch ( line ) {
case 0: THEPANEL->enter_screen(this->parent); return;
- case 1: command = "G91\nG1 E5 F100\nG90"; break;
- case 2: command = "G91\nG1 E-5 F100\nG90"; break;
- case 3: setupConfigSettings(); // lazy load
- break;
+ case 1: send_command("M120\nG91\nG1 E5 F100\nM121"); break;
+ case 2: send_command("M120\nG91\nG1 E-5 F100\nM121"); break;
+ case 3: setupConfigSettings(); break; // lazy load
}
}
-// queuing commands needs to be done from main loop
-void ExtruderScreen::on_main_loop()
-{
- if (this->command == nullptr) return;
- send_command(this->command);
- this->command= nullptr;
-}
-
void ExtruderScreen::setupConfigSettings()
{
auto mvs= new ModifyValuesScreen(true); // self delete on exit
mvs->set_parent(this);
+ mvs->addMenuItem("E steps/mm",
+ // gets steps/mm for currently active extruder
+ []() -> float { float *rd; if(PublicData::get_value( extruder_checksum, (void **)&rd )) return *rd; else return 0.0F; },
+ [this](float v) { send_gcode("M92", 'E', v); },
+ 0.1F,
+ 1.0F
+ );
+
+ mvs->addMenuItem("Filament diameter",
+ // gets filament diameter for currently active extruder
+ []() -> float { float *rd; if(PublicData::get_value( extruder_checksum, (void **)&rd )) return *(rd+1); else return 0.0F; },
+ [this](float v) { send_gcode("M200", 'D', v); },
+ 0.01F,
+ 0.0F,
+ 4.0F
+ );
+
// flow rate
mvs->addMenuItem("Flow rate", // menu name
[]() -> float { float *rd; if(PublicData::get_value( extruder_checksum, (void **)&rd )) return *(rd+2)*100.0F; else return 100.0F; }, // getter as fraction