diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h
index 581f078f7ae4fc0a8c4da5f809a888461d81b60e..da9bc0de90314a65941f023292a57fd13a954353 100644
--- a/Marlin/Marlin.h
+++ b/Marlin/Marlin.h
@@ -342,12 +342,12 @@ float code_value_temp_diff();
#endif
#if ENABLED(FILAMENT_WIDTH_SENSOR)
- extern float filament_width_nominal; //holds the theoretical filament diameter i.e., 3.00 or 1.75
- extern bool filament_sensor; //indicates that filament sensor readings should control extrusion
- extern float filament_width_meas; //holds the filament diameter as accurately measured
- extern int8_t measurement_delay[]; //ring buffer to delay measurement
- extern int filwidth_delay_index1, filwidth_delay_index2; //ring buffer index. used by planner, temperature, and main code
- extern int meas_delay_cm; //delay distance
+ extern bool filament_sensor; // Flag that filament sensor readings should control extrusion
+ extern float filament_width_nominal, // Theoretical filament diameter i.e., 3.00 or 1.75
+ filament_width_meas; // Measured filament diameter
+ extern int8_t measurement_delay[]; // Ring buffer to delay measurement
+ extern int filwidth_delay_index[2]; // Ring buffer indexes. Used by planner, temperature, and main code
+ extern int meas_delay_cm; // Delay distance
#endif
#if ENABLED(FILAMENT_CHANGE_FEATURE)
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index db10b778b7e0598bf739e2e65d13c39c28b5dec3..7ab7af853226a90006082afcf81a4f99ca2d10eb 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -500,13 +500,11 @@ static uint8_t target_extruder;
#endif
#if ENABLED(FILAMENT_WIDTH_SENSOR)
- //Variables for Filament Sensor input
- float filament_width_nominal = DEFAULT_NOMINAL_FILAMENT_DIA; //Set nominal filament width, can be changed with M404
bool filament_sensor = false; //M405 turns on filament_sensor control, M406 turns it off
- float filament_width_meas = DEFAULT_MEASURED_FILAMENT_DIA; //Stores the measured filament diameter
- int8_t measurement_delay[MAX_MEASUREMENT_DELAY + 1]; //ring buffer to delay measurement store extruder factor after subtracting 100
- int filwidth_delay_index1 = 0; //index into ring buffer
- int filwidth_delay_index2 = -1; //index into ring buffer - set to -1 on startup to indicate ring buffer needs to be initialized
+ float filament_width_nominal = DEFAULT_NOMINAL_FILAMENT_DIA, // Nominal filament width. Change with M404
+ filament_width_meas = DEFAULT_MEASURED_FILAMENT_DIA; // Measured filament diameter
+ int8_t measurement_delay[MAX_MEASUREMENT_DELAY + 1]; // Ring buffer to delayed measurement. Store extruder factor after subtracting 100
+ int filwidth_delay_index[2] = { 0, -1 }; // Indexes into ring buffer
int meas_delay_cm = MEASUREMENT_DELAY_CM; //distance delay setting
#endif
@@ -6137,13 +6135,13 @@ inline void gcode_M400() { stepper.synchronize(); }
if (code_seen('D')) meas_delay_cm = code_value_int();
NOMORE(meas_delay_cm, MAX_MEASUREMENT_DELAY);
- if (filwidth_delay_index2 == -1) { // Initialize the ring buffer if not done since startup
+ if (filwidth_delay_index[1] == -1) { // Initialize the ring buffer if not done since startup
int temp_ratio = thermalManager.widthFil_to_size_ratio();
for (uint8_t i = 0; i < COUNT(measurement_delay); ++i)
measurement_delay[i] = temp_ratio - 100; // Subtract 100 to scale within a signed byte
- filwidth_delay_index1 = filwidth_delay_index2 = 0;
+ filwidth_delay_index[0] = filwidth_delay_index[1] = 0;
}
filament_sensor = true;
diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp
index 3a1ffd1393605e497b57b9a129dce151883d389c..066c1445b0c614ed8ce1a52ef36657b056d57d08 100644
--- a/Marlin/planner.cpp
+++ b/Marlin/planner.cpp
@@ -868,7 +868,7 @@ void Planner::check_axes_activity() {
static float filwidth_e_count = 0, filwidth_delay_dist = 0;
//FMM update ring buffer used for delay with filament measurements
- if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM && filwidth_delay_index2 >= 0) { //only for extruder with filament sensor and if ring buffer is initialized
+ if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM && filwidth_delay_index[1] >= 0) { //only for extruder with filament sensor and if ring buffer is initialized
const int MMD_CM = MAX_MEASUREMENT_DELAY + 1, MMD_MM = MMD_CM * 10;
@@ -883,16 +883,16 @@ void Planner::check_axes_activity() {
while (filwidth_delay_dist >= MMD_MM) filwidth_delay_dist -= MMD_MM;
// Convert into an index into the measurement array
- filwidth_delay_index1 = (int)(filwidth_delay_dist * 0.1 + 0.0001);
+ filwidth_delay_index[0] = (int)(filwidth_delay_dist * 0.1 + 0.0001);
// If the index has changed (must have gone forward)...
- if (filwidth_delay_index1 != filwidth_delay_index2) {
+ if (filwidth_delay_index[0] != filwidth_delay_index[1]) {
filwidth_e_count = 0; // Reset the E movement counter
int8_t meas_sample = thermalManager.widthFil_to_size_ratio() - 100; // Subtract 100 to reduce magnitude - to store in a signed char
do {
- filwidth_delay_index2 = (filwidth_delay_index2 + 1) % MMD_CM; // The next unused slot
- measurement_delay[filwidth_delay_index2] = meas_sample; // Store the measurement
- } while (filwidth_delay_index1 != filwidth_delay_index2); // More slots to fill?
+ filwidth_delay_index[1] = (filwidth_delay_index[1] + 1) % MMD_CM; // The next unused slot
+ measurement_delay[filwidth_delay_index[1]] = meas_sample; // Store the measurement
+ } while (filwidth_delay_index[0] != filwidth_delay_index[1]); // More slots to fill?
}
}
}
diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp
index c6122a4c6c223603d89c8bbeb4da6eb421af77b9..084559d03364dd3f1ac3d54a5941d0b7816ac3e0 100644
--- a/Marlin/temperature.cpp
+++ b/Marlin/temperature.cpp
@@ -755,7 +755,7 @@ void Temperature::manage_heater() {
// Control the extruder rate based on the width sensor
#if ENABLED(FILAMENT_WIDTH_SENSOR)
if (filament_sensor) {
- meas_shift_index = filwidth_delay_index1 - meas_delay_cm;
+ meas_shift_index = filwidth_delay_index[0] - meas_delay_cm;
if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
// Get the delayed info and add 100 to reconstitute to a percent of