From 62d379fd3b92639f2324a4cea598bcb7b1341d5e Mon Sep 17 00:00:00 2001 From: DocWibbleyWobbley Date: Tue, 2 Nov 2021 13:15:30 +0200 Subject: [PATCH] Added filament length estimation --- gcode.cpp | 32 +++++++++++++++++--------------- gcode.h | 32 ++++++++++++++++---------------- main.cpp | 8 +++++++- 3 files changed, 40 insertions(+), 32 deletions(-) diff --git a/gcode.cpp b/gcode.cpp index 46e7183..8790f57 100644 --- a/gcode.cpp +++ b/gcode.cpp @@ -38,7 +38,7 @@ pair extract_argument(const string& str) } // Linear Move -double g1(const vector& line_tokens, Point& pos, double& speed) +double g1(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { double result; vector::const_iterator it; @@ -124,7 +124,7 @@ double g1(const vector& line_tokens, Point& pos, double& speed) } // Dwell -double g4(const vector& line_tokens, Point& pos, double& speed) +double g4(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { double result; vector::const_iterator it; @@ -168,26 +168,26 @@ double g4(const vector& line_tokens, Point& pos, double& speed) } // Set Units to Milimeters -double g21(const vector& line_tokens, Point& pos, double& speed) +double g21(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Move to Origin (Home) -double g28(const vector& line_tokens, Point& pos, double& speed) +double g28(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { // Used only at beginning or end so not relevant return 0; } // Set to Absolute Positioning -double g90(const vector& line_tokens, Point& pos, double& speed) +double g90(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Set Position -double g92(const vector& line_tokens, Point& pos, double& speed) +double g92(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { vector::const_iterator it; pair arg; @@ -212,6 +212,8 @@ double g92(const vector& line_tokens, Point& pos, double& speed) switch (arg.first) { case 'E': + e_total_offset += pos.e; + e_total_offset -= arg.second; pos.e = arg.second; break; @@ -244,56 +246,56 @@ double g92(const vector& line_tokens, Point& pos, double& speed) } // Set extruder to absolute mode -double m82(const vector& line_tokens, Point& pos, double& speed) +double m82(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Stop idle hold -double m84(const vector& line_tokens, Point& pos, double& speed) +double m84(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Set Extruder Temperature -double m104(const vector& line_tokens, Point& pos, double& speed) +double m104(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Fan On -double m106(const vector& line_tokens, Point& pos, double& speed) +double m106(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Fan Off -double m107(const vector& line_tokens, Point& pos, double& speed) +double m107(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Set Extruder Temperature and Wait -double m109(const vector& line_tokens, Point& pos, double& speed) +double m109(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { // Assume everything is preheated return 0; } // Display Message -double m117(const vector& line_tokens, Point& pos, double& speed) +double m117(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Set Bed Temperature (Fast) -double m140(const vector& line_tokens, Point& pos, double& speed) +double m140(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { return 0; } // Wait for bed temperature to reach target temp -double m190(const vector& line_tokens, Point& pos, double& speed) +double m190(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset) { // Assume everything is preheated return 0; diff --git a/gcode.h b/gcode.h index e87e25d..8c9188e 100644 --- a/gcode.h +++ b/gcode.h @@ -9,24 +9,24 @@ using namespace std; // Typedef of the function pointer -typedef double (*gcode_cmd_t)(const vector&, Point&, double&); +typedef double (*gcode_cmd_t)(const vector&, Point&, double&, double&); // All handled gcode commands -double g1(const vector& line_tokens, Point& pos, double& speed); -double g4(const vector& line_tokens, Point& pos, double& speed); -double g21(const vector& line_tokens, Point& pos, double& speed); -double g28(const vector& line_tokens, Point& pos, double& speed); -double g90(const vector& line_tokens, Point& pos, double& speed); -double g92(const vector& line_tokens, Point& pos, double& speed); +double g1(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double g4(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double g21(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double g28(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double g90(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double g92(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); -double m82(const vector& line_tokens, Point& pos, double& speed); -double m84(const vector& line_tokens, Point& pos, double& speed); -double m104(const vector& line_tokens, Point& pos, double& speed); -double m106(const vector& line_tokens, Point& pos, double& speed); -double m107(const vector& line_tokens, Point& pos, double& speed); -double m109(const vector& line_tokens, Point& pos, double& speed); -double m117(const vector& line_tokens, Point& pos, double& speed); -double m140(const vector& line_tokens, Point& pos, double& speed); -double m190(const vector& line_tokens, Point& pos, double& speed); +double m82(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m84(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m104(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m106(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m107(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m109(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m117(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m140(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); +double m190(const vector& line_tokens, Point& pos, double& speed, double& e_total_offset); #endif // GCODE_H_ diff --git a/main.cpp b/main.cpp index 0c5881e..208b2b6 100644 --- a/main.cpp +++ b/main.cpp @@ -142,6 +142,7 @@ int main(int argc, char **argv) Point pos; double speed; double total_time; + double e_total; int hours; int minutes; @@ -157,6 +158,7 @@ int main(int argc, char **argv) pos.e = 0; speed = 0; total_time = 0; + e_total = 0; init_map(gcode_map); @@ -172,7 +174,7 @@ int main(int argc, char **argv) if (0 != gcode_map.count(line_tokens[0])) { - total_time += gcode_map[line_tokens[0]](line_tokens, pos, speed); + total_time += gcode_map[line_tokens[0]](line_tokens, pos, speed, e_total); } else { @@ -181,6 +183,10 @@ int main(int argc, char **argv) } file.close(); + e_total += pos.e; + + cout << "Filament - " << e_total << "mm" << endl; + cout << "Estimation - "; print_time(total_time); cout << endl;