Add filament diameter to panel settings
authorJim Morris <morris@wolfman.com>
Sun, 8 Jun 2014 22:00:36 +0000 (15:00 -0700)
committerJim Morris <morris@wolfman.com>
Sun, 8 Jun 2014 22:00:36 +0000 (15:00 -0700)
M503 should return steps/mm setting

src/modules/tools/extruder/Extruder.cpp
src/modules/tools/extruder/Extruder.h
src/modules/utils/panel/screens/MainMenuScreen.cpp

index 330c6eb..1456214 100644 (file)
@@ -58,7 +58,7 @@
 #define SOLO 1
 #define FOLLOW 2
 
-#define PI 3.14159265358979f
+#define PI 3.14159265358979F
 
 #define max(a,b) (((a) > (b)) ? (a) : (b))
 
@@ -161,9 +161,8 @@ void Extruder::on_get_public_data(void* argument){
     if(!pdr->starts_with(extruder_checksum)) return;
 
     if(this->enabled) {
-        static float return_data;
-        return_data= this->steps_per_millimeter;
-        pdr->set_data_ptr(&return_data);
+        // Note this is allowing both step/mm and filament diameter to be exposed via public data
+        pdr->set_data_ptr(&this->steps_per_millimeter_setting);
         pdr->set_taken();
     }
 }
@@ -212,12 +211,13 @@ void Extruder::on_gcode_received(void *argument)
                 this->update_steps_per_millimeter();
             }
             gcode->mark_as_taken();
+
         } else if (gcode->m == 500 || gcode->m == 503) { // M500 saves some volatile settings to config override file, M503 just prints the settings
             if( this->single_config ) {
-                gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f\n", this->steps_per_millimeter);
+                gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f\n", this->steps_per_millimeter_setting);
                 gcode->stream->printf(";E Filament diameter:\nM200 D%1.4f\n", this->filament_diameter);
             } else {
-                gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f P%d\n", this->steps_per_millimeter, this->identifier);
+                gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f P%d\n", this->steps_per_millimeter_setting, this->identifier);
                 gcode->stream->printf(";E Filament diameter:\nM200 D%1.4f P%d\n", this->filament_diameter, this->identifier);
             }
             gcode->mark_as_taken();
index 40ab00c..704a5a2 100644 (file)
@@ -47,9 +47,15 @@ class Extruder : public Tool {
         float          current_position;             // Current point ( in mm ) for the current move, incremented every time a move is executed
         float          unstepped_distance;           // overflow buffer for requested moves that are less than 1 step
         Block*         current_block;                // Current block we are stepping, same as Stepper's one
+
         float          steps_per_millimeter;         // Steps to travel one millimeter
-        float          steps_per_millimeter_setting; // original steps to travel one millimeter as set in config, saved while in volumetric mode
-        float          filament_diameter;            // filament diameter
+
+        // kept together so they can be passed as public data
+        struct {
+            float          steps_per_millimeter_setting; // original steps to travel one millimeter as set in config, saved while in volumetric mode
+            float          filament_diameter;            // filament diameter
+        };
+
         float          feed_rate;                    //
         float          acceleration;                 //
         float          max_speed;
@@ -57,10 +63,12 @@ class Extruder : public Tool {
         float          travel_ratio;
         float          travel_distance;
 
-        char mode;                                    // extruder motion mode,  OFF, SOLO, or FOLLOW
-        bool absolute_mode;                           // absolute/relative coordinate mode switch
-        bool paused;
-        bool single_config;
+        char mode;        // extruder motion mode,  OFF, SOLO, or FOLLOW
+        struct {
+            bool absolute_mode:1; // absolute/relative coordinate mode switch
+            bool paused:1;
+            bool single_config:1;
+        };
 
         StepperMotor* stepper_motor;
 
index 186aaf5..ce8019a 100644 (file)
@@ -80,12 +80,21 @@ PanelScreen* MainMenuScreen::setupConfigureScreen()
 
     mvs->addMenuItem("E steps/mm",
         // gets steps/mm for currently active extruder
-        []() -> float { void *rd; THEKERNEL->public_data->get_value( extruder_checksum, &rd ); return rd==nullptr ? 0.0F : *((float*)rd); },
+        []() -> float { float *rd; if(THEKERNEL->public_data->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(THEKERNEL->public_data->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
+        );
+
     mvs->addMenuItem("Z Home Ofs",
         []() -> float { void *rd; THEKERNEL->public_data->get_value( endstops_checksum, home_offset_checksum, &rd ); return rd==nullptr ? 0.0F : ((float*)rd)[2]; },
         [this](float v) { send_gcode("M206", 'Z', v); },