Compare commits
1 Commits
v2.0.0-bet
...
6cccf3d603
| Author | SHA1 | Date | |
|---|---|---|---|
| 6cccf3d603 |
@@ -178,9 +178,11 @@ void loop() {
|
|||||||
// Ausgabe der Waage auf Display
|
// Ausgabe der Waage auf Display
|
||||||
if(pauseMainTask == 0)
|
if(pauseMainTask == 0)
|
||||||
{
|
{
|
||||||
|
// Use filtered weight for smooth display, but still check API weight for significant changes
|
||||||
|
int16_t displayWeight = getFilteredDisplayWeight();
|
||||||
if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == NFC_IDLE && (!bambuCredentials.autosend_enable || autoSetToBambuSpoolId == 0)))
|
if (mainTaskWasPaused || (weight != lastWeight && nfcReaderState == NFC_IDLE && (!bambuCredentials.autosend_enable || autoSetToBambuSpoolId == 0)))
|
||||||
{
|
{
|
||||||
(weight < 2) ? ((weight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(weight);
|
(displayWeight < 2) ? ((displayWeight < -2) ? oledShowMessage("!! -0") : oledShowWeight(0)) : oledShowWeight(displayWeight);
|
||||||
}
|
}
|
||||||
mainTaskWasPaused = false;
|
mainTaskWasPaused = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ int16_t weight = 0;
|
|||||||
#define MOVING_AVERAGE_SIZE 20 // Number of samples for moving average
|
#define MOVING_AVERAGE_SIZE 20 // Number of samples for moving average
|
||||||
#define LOW_PASS_ALPHA 0.15f // Low-pass filter coefficient (0.1-0.2 works well)
|
#define LOW_PASS_ALPHA 0.15f // Low-pass filter coefficient (0.1-0.2 works well)
|
||||||
#define DISPLAY_THRESHOLD 0.5f // Only update display if change > 0.5g
|
#define DISPLAY_THRESHOLD 0.5f // Only update display if change > 0.5g
|
||||||
|
#define API_THRESHOLD 2.0f // Only trigger API actions if change > 2g
|
||||||
#define MEASUREMENT_INTERVAL_MS 50 // Measurement interval in milliseconds
|
#define MEASUREMENT_INTERVAL_MS 50 // Measurement interval in milliseconds
|
||||||
|
|
||||||
float weightBuffer[MOVING_AVERAGE_SIZE];
|
float weightBuffer[MOVING_AVERAGE_SIZE];
|
||||||
@@ -24,6 +25,7 @@ uint8_t bufferIndex = 0;
|
|||||||
bool bufferFilled = false;
|
bool bufferFilled = false;
|
||||||
float filteredWeight = 0.0f;
|
float filteredWeight = 0.0f;
|
||||||
int16_t lastDisplayedWeight = 0;
|
int16_t lastDisplayedWeight = 0;
|
||||||
|
int16_t lastStableWeight = 0; // For API/action triggering
|
||||||
unsigned long lastMeasurementTime = 0;
|
unsigned long lastMeasurementTime = 0;
|
||||||
|
|
||||||
uint8_t weigthCouterToApi = 0;
|
uint8_t weigthCouterToApi = 0;
|
||||||
@@ -44,6 +46,7 @@ void resetWeightFilter() {
|
|||||||
bufferFilled = false;
|
bufferFilled = false;
|
||||||
filteredWeight = 0.0f;
|
filteredWeight = 0.0f;
|
||||||
lastDisplayedWeight = 0;
|
lastDisplayedWeight = 0;
|
||||||
|
lastStableWeight = 0; // Reset stable weight for API actions
|
||||||
|
|
||||||
// Initialize buffer with zeros
|
// Initialize buffer with zeros
|
||||||
for (int i = 0; i < MOVING_AVERAGE_SIZE; i++) {
|
for (int i = 0; i < MOVING_AVERAGE_SIZE; i++) {
|
||||||
@@ -96,13 +99,31 @@ int16_t processWeightReading(float rawWeight) {
|
|||||||
// Round to nearest gram
|
// Round to nearest gram
|
||||||
int16_t newWeight = round(smoothedWeight);
|
int16_t newWeight = round(smoothedWeight);
|
||||||
|
|
||||||
// Only update displayed weight if change is significant
|
// Update displayed weight if display threshold is reached
|
||||||
if (abs(newWeight - lastDisplayedWeight) >= DISPLAY_THRESHOLD) {
|
if (abs(newWeight - lastDisplayedWeight) >= DISPLAY_THRESHOLD) {
|
||||||
lastDisplayedWeight = newWeight;
|
lastDisplayedWeight = newWeight;
|
||||||
return newWeight;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return weight; // Return current weight if change is too small
|
// Update global weight for API actions only if stable threshold is reached
|
||||||
|
int16_t weightToReturn = weight; // Default: keep current weight
|
||||||
|
|
||||||
|
if (abs(newWeight - lastStableWeight) >= API_THRESHOLD) {
|
||||||
|
lastStableWeight = newWeight;
|
||||||
|
weightToReturn = newWeight;
|
||||||
|
|
||||||
|
Serial.printf("Stable weight change detected: %d -> %d (diff: %d)\n",
|
||||||
|
weight, newWeight, abs(newWeight - weight));
|
||||||
|
}
|
||||||
|
|
||||||
|
return weightToReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current filtered weight for display purposes
|
||||||
|
* This returns the smoothed weight even if it hasn't triggered API actions
|
||||||
|
*/
|
||||||
|
int16_t getFilteredDisplayWeight() {
|
||||||
|
return lastDisplayedWeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ##### Funktionen für Waage #####
|
// ##### Funktionen für Waage #####
|
||||||
@@ -172,18 +193,19 @@ void scale_loop(void * parameter) {
|
|||||||
// Process weight with stabilization
|
// Process weight with stabilization
|
||||||
int16_t stabilizedWeight = processWeightReading(rawWeight);
|
int16_t stabilizedWeight = processWeightReading(rawWeight);
|
||||||
|
|
||||||
// Update global weight variable only if it changed
|
// Update global weight variable only if it changed significantly (for API actions)
|
||||||
if (stabilizedWeight != weight) {
|
if (stabilizedWeight != weight) {
|
||||||
weight = stabilizedWeight;
|
weight = stabilizedWeight;
|
||||||
|
Serial.printf("API weight updated: %d\n", weight);
|
||||||
|
}
|
||||||
|
|
||||||
// Debug output for monitoring (can be removed in production)
|
// Debug output for monitoring (can be removed in production)
|
||||||
static unsigned long lastDebugTime = 0;
|
static unsigned long lastDebugTime = 0;
|
||||||
if (currentTime - lastDebugTime > 1000) { // Print every second
|
if (currentTime - lastDebugTime > 2000) { // Print every 2 seconds
|
||||||
Serial.printf("Raw: %.2f, Filtered: %.2f, Final: %d\n",
|
Serial.printf("Raw: %.2f, Filtered: %.2f, Display: %d, API: %d\n",
|
||||||
rawWeight, filteredWeight, weight);
|
rawWeight, filteredWeight, lastDisplayedWeight, weight);
|
||||||
lastDebugTime = currentTime;
|
lastDebugTime = currentTime;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
lastMeasurementTime = currentTime;
|
lastMeasurementTime = currentTime;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ void resetWeightFilter();
|
|||||||
float calculateMovingAverage();
|
float calculateMovingAverage();
|
||||||
float applyLowPassFilter(float newValue);
|
float applyLowPassFilter(float newValue);
|
||||||
int16_t processWeightReading(float rawWeight);
|
int16_t processWeightReading(float rawWeight);
|
||||||
|
int16_t getFilteredDisplayWeight();
|
||||||
|
|
||||||
extern HX711 scale;
|
extern HX711 scale;
|
||||||
extern int16_t weight;
|
extern int16_t weight;
|
||||||
|
|||||||
Reference in New Issue
Block a user