From e8805b543e84492eb069b855afa37b7c50df4f85 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Wed, 17 Aug 2022 06:40:40 +0200 Subject: [PATCH] Add registers for measured bowden lengths (individual slots) --- src/logic/feed_to_bondtech.cpp | 10 ++++------ src/logic/feed_to_bondtech.h | 2 +- src/modules/permanent_storage.cpp | 2 -- src/registers.cpp | 26 ++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/logic/feed_to_bondtech.cpp b/src/logic/feed_to_bondtech.cpp index 15f3b49..1894b1e 100644 --- a/src/logic/feed_to_bondtech.cpp +++ b/src/logic/feed_to_bondtech.cpp @@ -35,7 +35,7 @@ void FeedToBondtech::UpdateBowdenLength(int32_t feedEnd_mm) { static_assert(config::maximumBowdenLength.v <= 65535, "Max bowden length too long"); int16_t mbl = (int16_t)measuredBowdenLength; int16_t difference = abs(mbl - mps::BowdenLength::Get(mg::globals.ActiveSlot())); - if (difference > 5) { // @@TODO 5_mm is it good enough? + if (difference > 10) { // @@TODO 10_mm is it good enough? mps::BowdenLength::Set(mg::globals.ActiveSlot(), mbl); } } @@ -63,10 +63,10 @@ bool FeedToBondtech::Step() { state = PushingFilamentFast; mpu::pulley.InitAxis(); // plan a fast move while in the safe minimal length - feedStart_mm = mm::motion.CurPosition(mm::Pulley); + feedStart_mm = mpu::pulley.CurrentPosition_mm(); // fast feed in millimeters - if the EEPROM value is incorrect, we'll get the default length unit::U_mm fastFeedDistance = { (long double)mps::BowdenLength::Get(mg::globals.ActiveSlot()) }; - mpu::pulley.PlanMove(fastFeedDistance, + mpu::pulley.PlanMove(fastFeedDistance, mg::globals.PulleyLoadFeedrate_mm_s(), mg::globals.PulleySlowFeedrate_mm_s()); // plan additional slow move while waiting for fsensor to trigger @@ -121,9 +121,7 @@ bool FeedToBondtech::Step() { dbg_logic_P(PSTR("Feed to Bondtech --> Idler disengaged")); dbg_logic_fP(PSTR("Pulley end steps %u"), mpu::pulley.CurrentPosition_mm()); state = OK; - mpu::pulley.Disable(); - UpdateBowdenLength(mm::motion.CurPosition(mm::Pulley)); - mm::motion.Disable(mm::Pulley); + UpdateBowdenLength(mpu::pulley.CurrentPosition_mm()); ml::leds.SetMode(mg::globals.ActiveSlot(), ml::green, ml::on); } return false; diff --git a/src/logic/feed_to_bondtech.h b/src/logic/feed_to_bondtech.h index 834bd3c..017dd23 100644 --- a/src/logic/feed_to_bondtech.h +++ b/src/logic/feed_to_bondtech.h @@ -59,7 +59,7 @@ private: uint8_t state; uint8_t maxRetries; - int32_t feedStart_mm; // intentionally trying to avoid using U_mm because it is a float (reps. long double) + int32_t feedStart_mm; // intentionally trying to avoid using U_mm because it is a float (resp. long double) }; } // namespace logic diff --git a/src/modules/permanent_storage.cpp b/src/modules/permanent_storage.cpp index cae52cc..cff6319 100644 --- a/src/modules/permanent_storage.cpp +++ b/src/modules/permanent_storage.cpp @@ -51,8 +51,6 @@ constexpr const uint16_t eepromBowdenLenDefault = config::defaultBowdenLength.v; constexpr const uint16_t eepromBowdenLenMinimum = config::minimumBowdenLength.v; ///< Minimum bowden length (~341 mm) constexpr const uint16_t eepromBowdenLenMaximum = config::maximumBowdenLength.v; ///< Maximum bowden length (~792 mm) -// static_assert (mm::unitToSteps(config::maximumBowdenLength) < 65535U, ""); - namespace ee = hal::eeprom; #define EEOFFSET(x) reinterpret_cast(&(x)) diff --git a/src/registers.cpp b/src/registers.cpp index 4a595e1..b4d5ea0 100644 --- a/src/registers.cpp +++ b/src/registers.cpp @@ -13,6 +13,7 @@ #include "modules/globals.h" #include "modules/idler.h" #include "modules/pulley.h" +#include "modules/permanent_storage.h" #include "modules/selector.h" /** @defgroup register_table Register Table @@ -362,6 +363,31 @@ static const RegisterRec registers[] /*PROGMEM*/ = { [](uint16_t d) { d >= config::toolCount ? mi::idler.Disengage() : mi::idler.Engage(d); }, 1), + // 0x1d Detected bowden length slot 0 RW + RegisterRec( + []() -> uint16_t { return mps::BowdenLength::Get(0); }, + [](uint16_t d) { mps::BowdenLength::Set(0, d); }, + 2), + // 0x1e Detected bowden length slot 1 RW + RegisterRec( + []() -> uint16_t { return mps::BowdenLength::Get(1); }, + [](uint16_t d) { mps::BowdenLength::Set(1, d); }, + 2), + // 0x1f Detected bowden length slot 2 RW + RegisterRec( + []() -> uint16_t { return mps::BowdenLength::Get(2); }, + [](uint16_t d) { mps::BowdenLength::Set(2, d); }, + 2), + // 0x20 Detected bowden length slot 3 RW + RegisterRec( + []() -> uint16_t { return mps::BowdenLength::Get(3); }, + [](uint16_t d) { mps::BowdenLength::Set(3, d); }, + 2), + // 0x21 Detected bowden length slot 4 RW + RegisterRec( + []() -> uint16_t { return mps::BowdenLength::Get(4); }, + [](uint16_t d) { mps::BowdenLength::Set(4, d); }, + 2), }; static constexpr uint8_t registersSize = sizeof(registers) / sizeof(RegisterRec);