Compare commits
	
		
			7 Commits
		
	
	
		
			nfc
			...
			v2.0.0-bet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7a15424bc7 | |||
| 039a29fa3c | |||
| 6cccf3d603 | |||
| 693ee839e5 | |||
| 0bf383ecd9 | |||
| 6451d91c59 | |||
| 8d82e221b5 | 
							
								
								
									
										230
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										230
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,235 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## [2.0.0-beta12] - 2025-08-30 | ||||||
|  | ### Breaking Changes | ||||||
|  | - enhance commit categorization for breaking changes | ||||||
|  | - Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  | - enhance weight processing with filtered display and API stability checks | ||||||
|  | - implement weight stabilization functions and improve tare handling | ||||||
|  | - add fast-path JSON reading for web interface display | ||||||
|  | - add handling for successful NFC tag writes to send weight to Spoolman without auto-sending to Bambu | ||||||
|  | - implement robust page reading with error recovery for NFC tags | ||||||
|  | - enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection | ||||||
|  | - implement robust page reading and safe tag detection with error recovery | ||||||
|  | - add Manufacturer Tags support documentation in German and English | ||||||
|  | - add display delay for vendor, filament, and spool creation processes | ||||||
|  | - add progress bar updates for vendor and filament creation processes | ||||||
|  | - update vendor and filament ID handling to use NULL and add delays for stability | ||||||
|  | - add delay to ensure proper setting of vendor and filament IDs after API state changes | ||||||
|  | - enhance NDEF decoding with detailed validation and debugging output | ||||||
|  | - enhance NDEF decoding to validate structure and extract JSON payload | ||||||
|  | - add logging for decoded JSON data in NFC processing | ||||||
|  | - implement filament and spool creation in Spoolman API | ||||||
|  | - Add JSON structure comments for filament and spool creation | ||||||
|  | - Add vendor and filament management to API; implement recycling factory handling in NFC | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta12 | ||||||
|  | - update changelog and header for version v2.0.0-beta11 | ||||||
|  | - update changelog and header for version v2.0.0-beta11 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta11 | ||||||
|  | - update changelog and header for version v2.0.0-beta10 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta10 | ||||||
|  | - update changelog and header for version v2.0.0-beta9 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta9 | ||||||
|  | - update changelog and header for version v2.0.0-beta8 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta8 | ||||||
|  | - update changelog and header for version v2.0.0-beta7 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta7 | ||||||
|  | - update changelog and header for version v2.0.0-beta6 | ||||||
|  | - update changelog and header for version v2.0.0-beta6 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta6 | ||||||
|  | - update changelog and header for version v2.0.0-beta5 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta5 | ||||||
|  | - update changelog and header for version v2.0.0-beta4 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta4 | ||||||
|  | - update changelog and header for version v2.0.0-beta3 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta3 | ||||||
|  | - update createVendor and checkVendor functions to accept JsonDocument payload | ||||||
|  | - update changelog and header for version v2.0.0-beta2 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta2 | ||||||
|  | - clarify product URL description for Manufacturer Tags in German and English documentation | ||||||
|  | - update changelog and header for version v2.0.0-beta1 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta1 | ||||||
|  | - update version to 2.0.0 in platformio.ini | ||||||
|  | - update changelog and header for version v1.5.12-beta18 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta18 | ||||||
|  | - update changelog and header for version v1.5.12-beta17 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta17 | ||||||
|  | - optimize page limit detection and remove redundant verification code | ||||||
|  | - update changelog and header for version v1.5.12-beta16 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta16 | ||||||
|  | - Refactor NFC interface handling and improve error diagnostics | ||||||
|  | - update changelog and header for version v1.5.12-beta15 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta15 | ||||||
|  | - enhance NFC write operation diagnostics and improve error handling | ||||||
|  | - enhance NFC write operation handling and prevent tag operations during write | ||||||
|  | - update changelog and header for version v1.5.12-beta14 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta14 | ||||||
|  | - optimize JSON payload structure and enhance NFC tag validation process | ||||||
|  | - update changelog and header for version v1.5.12-beta13 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta13 | ||||||
|  | - reorganize clearUserDataArea function for improved clarity and safety | ||||||
|  | - update changelog and header for version v1.5.12-beta12 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta12 | ||||||
|  | - update changelog and header for version v1.5.12-beta11 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta11 | ||||||
|  | - update changelog and header for version v1.5.12-beta10 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta10 | ||||||
|  | - streamline task creation in checkVendor and checkFilament functions | ||||||
|  | - update changelog and header for version v1.5.12-beta9 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta9 | ||||||
|  | - update changelog and header for version v1.5.12-beta8 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta8 | ||||||
|  | - update changelog and header for version v1.5.12-beta7 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta7 | ||||||
|  | - update changelog and header for version v1.5.12-beta6 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta6 | ||||||
|  | - improve task synchronization in vendor, filament, and spool creation functions | ||||||
|  | - update changelog and header for version v1.5.12-beta5 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta5 | ||||||
|  | - update changelog and header for version v1.5.12-beta4 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta4 | ||||||
|  | - update changelog and header for version v1.5.12-beta3 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta3 | ||||||
|  | - update changelog and header for version v1.5.12-beta2 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta2 | ||||||
|  | - update changelog and header for version v1.5.12-beta1 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta1 | ||||||
|  | - Merge branch 'main' into recyclingfabrik | ||||||
|  | - Merge branch 'main' into recyclingfabrik | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - call scale.tare() in setup after starting scale | ||||||
|  | - update createVendor function to use external_id as comment instead of static text | ||||||
|  | - update to_old_version in platformio.ini to reflect correct previous version | ||||||
|  | - increase delay in start_scale function for improved stability | ||||||
|  | - replace progress bar with message display for remaining weight in sendToApi function | ||||||
|  | - update vendor check to use shorthand key in payload | ||||||
|  | - reset NFC state on API send failure to allow retry | ||||||
|  | - update createdFilamentId reset value to 65535 for better task handling | ||||||
|  | - update createdVendorId reset value to 65535 for improved API handling | ||||||
|  | - update spoolman ID reset values to 65535 for better API response detection | ||||||
|  | - correct color_hex key usage and comment out unused date fields in spool creation | ||||||
|  | - improve API state handling and vendor name formatting | ||||||
|  | - enhance filament creation logic to include dynamic comments based on payload | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [2.0.0-beta11] - 2025-08-30 | ||||||
|  | ### Breaking Changes | ||||||
|  | - enhance commit categorization for breaking changes | ||||||
|  | - Handling of Spools with Tags from Vendors. fix: improve get_last_tag function to handle non-beta tags and fallback to newest tag | ||||||
|  |  | ||||||
|  | ### Added | ||||||
|  | - implement weight stabilization functions and improve tare handling | ||||||
|  | - add fast-path JSON reading for web interface display | ||||||
|  | - add handling for successful NFC tag writes to send weight to Spoolman without auto-sending to Bambu | ||||||
|  | - implement robust page reading with error recovery for NFC tags | ||||||
|  | - enhance NFC tag reading with robust error recovery and JSON optimization for fast-path detection | ||||||
|  | - implement robust page reading and safe tag detection with error recovery | ||||||
|  | - add Manufacturer Tags support documentation in German and English | ||||||
|  | - add display delay for vendor, filament, and spool creation processes | ||||||
|  | - add progress bar updates for vendor and filament creation processes | ||||||
|  | - update vendor and filament ID handling to use NULL and add delays for stability | ||||||
|  | - add delay to ensure proper setting of vendor and filament IDs after API state changes | ||||||
|  | - enhance NDEF decoding with detailed validation and debugging output | ||||||
|  | - enhance NDEF decoding to validate structure and extract JSON payload | ||||||
|  | - add logging for decoded JSON data in NFC processing | ||||||
|  | - implement filament and spool creation in Spoolman API | ||||||
|  | - Add JSON structure comments for filament and spool creation | ||||||
|  | - Add vendor and filament management to API; implement recycling factory handling in NFC | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update changelog and header for version v2.0.0-beta11 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta11 | ||||||
|  | - update changelog and header for version v2.0.0-beta10 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta10 | ||||||
|  | - update changelog and header for version v2.0.0-beta9 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta9 | ||||||
|  | - update changelog and header for version v2.0.0-beta8 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta8 | ||||||
|  | - update changelog and header for version v2.0.0-beta7 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta7 | ||||||
|  | - update changelog and header for version v2.0.0-beta6 | ||||||
|  | - update changelog and header for version v2.0.0-beta6 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta6 | ||||||
|  | - update changelog and header for version v2.0.0-beta5 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta5 | ||||||
|  | - update changelog and header for version v2.0.0-beta4 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta4 | ||||||
|  | - update changelog and header for version v2.0.0-beta3 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta3 | ||||||
|  | - update createVendor and checkVendor functions to accept JsonDocument payload | ||||||
|  | - update changelog and header for version v2.0.0-beta2 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta2 | ||||||
|  | - clarify product URL description for Manufacturer Tags in German and English documentation | ||||||
|  | - update changelog and header for version v2.0.0-beta1 | ||||||
|  | - update platformio.ini for beta version v2.0.0-beta1 | ||||||
|  | - update version to 2.0.0 in platformio.ini | ||||||
|  | - update changelog and header for version v1.5.12-beta18 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta18 | ||||||
|  | - update changelog and header for version v1.5.12-beta17 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta17 | ||||||
|  | - optimize page limit detection and remove redundant verification code | ||||||
|  | - update changelog and header for version v1.5.12-beta16 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta16 | ||||||
|  | - Refactor NFC interface handling and improve error diagnostics | ||||||
|  | - update changelog and header for version v1.5.12-beta15 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta15 | ||||||
|  | - enhance NFC write operation diagnostics and improve error handling | ||||||
|  | - enhance NFC write operation handling and prevent tag operations during write | ||||||
|  | - update changelog and header for version v1.5.12-beta14 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta14 | ||||||
|  | - optimize JSON payload structure and enhance NFC tag validation process | ||||||
|  | - update changelog and header for version v1.5.12-beta13 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta13 | ||||||
|  | - reorganize clearUserDataArea function for improved clarity and safety | ||||||
|  | - update changelog and header for version v1.5.12-beta12 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta12 | ||||||
|  | - update changelog and header for version v1.5.12-beta11 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta11 | ||||||
|  | - update changelog and header for version v1.5.12-beta10 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta10 | ||||||
|  | - streamline task creation in checkVendor and checkFilament functions | ||||||
|  | - update changelog and header for version v1.5.12-beta9 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta9 | ||||||
|  | - update changelog and header for version v1.5.12-beta8 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta8 | ||||||
|  | - update changelog and header for version v1.5.12-beta7 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta7 | ||||||
|  | - update changelog and header for version v1.5.12-beta6 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta6 | ||||||
|  | - improve task synchronization in vendor, filament, and spool creation functions | ||||||
|  | - update changelog and header for version v1.5.12-beta5 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta5 | ||||||
|  | - update changelog and header for version v1.5.12-beta4 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta4 | ||||||
|  | - update changelog and header for version v1.5.12-beta3 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta3 | ||||||
|  | - update changelog and header for version v1.5.12-beta2 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta2 | ||||||
|  | - update changelog and header for version v1.5.12-beta1 | ||||||
|  | - update platformio.ini for beta version v1.5.12-beta1 | ||||||
|  | - Merge branch 'main' into recyclingfabrik | ||||||
|  | - Merge branch 'main' into recyclingfabrik | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - call scale.tare() in setup after starting scale | ||||||
|  | - update createVendor function to use external_id as comment instead of static text | ||||||
|  | - update to_old_version in platformio.ini to reflect correct previous version | ||||||
|  | - increase delay in start_scale function for improved stability | ||||||
|  | - replace progress bar with message display for remaining weight in sendToApi function | ||||||
|  | - update vendor check to use shorthand key in payload | ||||||
|  | - reset NFC state on API send failure to allow retry | ||||||
|  | - update createdFilamentId reset value to 65535 for better task handling | ||||||
|  | - update createdVendorId reset value to 65535 for improved API handling | ||||||
|  | - update spoolman ID reset values to 65535 for better API response detection | ||||||
|  | - correct color_hex key usage and comment out unused date fields in spool creation | ||||||
|  | - improve API state handling and vendor name formatting | ||||||
|  | - enhance filament creation logic to include dynamic comments based on payload | ||||||
|  |  | ||||||
| ## [2.0.0-beta10] - 2025-08-30 | ## [2.0.0-beta10] - 2025-08-30 | ||||||
| ### Breaking Changes | ### Breaking Changes | ||||||
| - enhance commit categorization for breaking changes | - enhance commit categorization for breaking changes | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
| ; https://docs.platformio.org/page/projectconf.html | ; https://docs.platformio.org/page/projectconf.html | ||||||
|  |  | ||||||
| [common] | [common] | ||||||
| version = "2.0.0-beta10" | version = "2.0.0-beta12" | ||||||
| to_old_version = "1.5.10" | to_old_version = "1.5.10" | ||||||
|  |  | ||||||
| ## | ## | ||||||
|   | |||||||
| @@ -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; | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										185
									
								
								src/scale.cpp
									
									
									
									
									
								
							
							
						
						
									
										185
									
								
								src/scale.cpp
									
									
									
									
									
								
							| @@ -13,6 +13,21 @@ TaskHandle_t ScaleTask; | |||||||
|  |  | ||||||
| int16_t weight = 0; | int16_t weight = 0; | ||||||
|  |  | ||||||
|  | // Weight stabilization variables | ||||||
|  | #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 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 | ||||||
|  |  | ||||||
|  | float weightBuffer[MOVING_AVERAGE_SIZE]; | ||||||
|  | uint8_t bufferIndex = 0; | ||||||
|  | bool bufferFilled = false; | ||||||
|  | float filteredWeight = 0.0f; | ||||||
|  | int16_t lastDisplayedWeight = 0; | ||||||
|  | int16_t lastStableWeight = 0;        // For API/action triggering | ||||||
|  | unsigned long lastMeasurementTime = 0; | ||||||
|  |  | ||||||
| uint8_t weigthCouterToApi = 0; | uint8_t weigthCouterToApi = 0; | ||||||
| uint8_t scale_tare_counter = 0; | uint8_t scale_tare_counter = 0; | ||||||
| bool scaleTareRequest = false; | bool scaleTareRequest = false; | ||||||
| @@ -21,6 +36,96 @@ bool scaleCalibrated; | |||||||
| bool autoTare = true; | bool autoTare = true; | ||||||
| bool scaleCalibrationActive = false; | bool scaleCalibrationActive = false; | ||||||
|  |  | ||||||
|  | // ##### Weight stabilization functions ##### | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Reset weight filter buffer - call after tare or calibration | ||||||
|  |  */ | ||||||
|  | void resetWeightFilter() { | ||||||
|  |   bufferIndex = 0; | ||||||
|  |   bufferFilled = false; | ||||||
|  |   filteredWeight = 0.0f; | ||||||
|  |   lastDisplayedWeight = 0; | ||||||
|  |   lastStableWeight = 0;            // Reset stable weight for API actions | ||||||
|  |    | ||||||
|  |   // Initialize buffer with zeros | ||||||
|  |   for (int i = 0; i < MOVING_AVERAGE_SIZE; i++) { | ||||||
|  |     weightBuffer[i] = 0.0f; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Calculate moving average from weight buffer | ||||||
|  |  */ | ||||||
|  | float calculateMovingAverage() { | ||||||
|  |   float sum = 0.0f; | ||||||
|  |   int count = bufferFilled ? MOVING_AVERAGE_SIZE : bufferIndex; | ||||||
|  |    | ||||||
|  |   for (int i = 0; i < count; i++) { | ||||||
|  |     sum += weightBuffer[i]; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   return (count > 0) ? sum / count : 0.0f; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Apply low-pass filter to smooth weight readings | ||||||
|  |  * Uses exponential smoothing: y_new = alpha * x_new + (1-alpha) * y_old | ||||||
|  |  */ | ||||||
|  | float applyLowPassFilter(float newValue) { | ||||||
|  |   filteredWeight = LOW_PASS_ALPHA * newValue + (1.0f - LOW_PASS_ALPHA) * filteredWeight; | ||||||
|  |   return filteredWeight; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Process new weight reading with stabilization | ||||||
|  |  * Returns stabilized weight value | ||||||
|  |  */ | ||||||
|  | int16_t processWeightReading(float rawWeight) { | ||||||
|  |   // Add to moving average buffer | ||||||
|  |   weightBuffer[bufferIndex] = rawWeight; | ||||||
|  |   bufferIndex = (bufferIndex + 1) % MOVING_AVERAGE_SIZE; | ||||||
|  |    | ||||||
|  |   if (bufferIndex == 0) { | ||||||
|  |     bufferFilled = true; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   // Calculate moving average | ||||||
|  |   float avgWeight = calculateMovingAverage(); | ||||||
|  |    | ||||||
|  |   // Apply low-pass filter | ||||||
|  |   float smoothedWeight = applyLowPassFilter(avgWeight); | ||||||
|  |    | ||||||
|  |   // Round to nearest gram | ||||||
|  |   int16_t newWeight = round(smoothedWeight); | ||||||
|  |    | ||||||
|  |   // Update displayed weight if display threshold is reached | ||||||
|  |   if (abs(newWeight - lastDisplayedWeight) >= DISPLAY_THRESHOLD) { | ||||||
|  |     lastDisplayedWeight = newWeight; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   // 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 ##### | ||||||
| uint8_t setAutoTare(bool autoTareValue) { | uint8_t setAutoTare(bool autoTareValue) { | ||||||
|   Serial.print("Set AutoTare to "); |   Serial.print("Set AutoTare to "); | ||||||
| @@ -39,6 +144,7 @@ uint8_t setAutoTare(bool autoTareValue) { | |||||||
| uint8_t tareScale() { | uint8_t tareScale() { | ||||||
|   Serial.println("Tare scale"); |   Serial.println("Tare scale"); | ||||||
|   scale.tare(); |   scale.tare(); | ||||||
|  |   resetWeightFilter(); // Reset stabilization filter after tare | ||||||
|    |    | ||||||
|   return 1; |   return 1; | ||||||
| } | } | ||||||
| @@ -48,37 +154,64 @@ void scale_loop(void * parameter) { | |||||||
|   Serial.println("Scale Loop started"); |   Serial.println("Scale Loop started"); | ||||||
|   Serial.println("++++++++++++++++++++++++++++++"); |   Serial.println("++++++++++++++++++++++++++++++"); | ||||||
|  |  | ||||||
|  |   // Initialize weight filter | ||||||
|  |   resetWeightFilter(); | ||||||
|  |   lastMeasurementTime = millis(); | ||||||
|  |  | ||||||
|   for(;;) { |   for(;;) { | ||||||
|     if (scale.is_ready())  |     unsigned long currentTime = millis(); | ||||||
|     { |      | ||||||
|       // Waage automatisch Taren, wenn zu lange Abweichung |     // Only measure at defined intervals to reduce noise | ||||||
|       if (autoTare && scale_tare_counter >= 5)  |     if (currentTime - lastMeasurementTime >= MEASUREMENT_INTERVAL_MS) { | ||||||
|  |       if (scale.is_ready())  | ||||||
|       { |       { | ||||||
|         Serial.println("Auto Tare scale"); |         // Waage automatisch Taren, wenn zu lange Abweichung | ||||||
|         scale.tare(); |         if (autoTare && scale_tare_counter >= 5)  | ||||||
|         scale_tare_counter = 0; |         { | ||||||
|       } |           Serial.println("Auto Tare scale"); | ||||||
|  |           scale.tare(); | ||||||
|  |           resetWeightFilter(); // Reset filter after auto tare | ||||||
|  |           scale_tare_counter = 0; | ||||||
|  |         } | ||||||
|  |  | ||||||
|       // Waage manuell Taren |         // Waage manuell Taren | ||||||
|       if (scaleTareRequest == true)  |         if (scaleTareRequest == true)  | ||||||
|       { |         { | ||||||
|         Serial.println("Re-Tare scale"); |           Serial.println("Re-Tare scale"); | ||||||
|         oledShowMessage("TARE Scale"); |           oledShowMessage("TARE Scale"); | ||||||
|         vTaskDelay(pdMS_TO_TICKS(1000)); |           vTaskDelay(pdMS_TO_TICKS(1000)); | ||||||
|         scale.tare(); |           scale.tare(); | ||||||
|         vTaskDelay(pdMS_TO_TICKS(1000)); |           resetWeightFilter(); // Reset filter after manual tare | ||||||
|         oledShowWeight(0); |           vTaskDelay(pdMS_TO_TICKS(1000)); | ||||||
|         scaleTareRequest = false; |           oledShowWeight(0); | ||||||
|       } |           scaleTareRequest = false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|       // Only update weight if median changed more than 1 |         // Get raw weight reading | ||||||
|       int16_t newWeight = round(scale.get_units()); |         float rawWeight = scale.get_units(); | ||||||
|       if(abs(weight-newWeight) > 1){ |          | ||||||
|         weight = newWeight; |         // Process weight with stabilization | ||||||
|  |         int16_t stabilizedWeight = processWeightReading(rawWeight); | ||||||
|  |          | ||||||
|  |         // Update global weight variable only if it changed significantly (for API actions) | ||||||
|  |         if (stabilizedWeight != weight) { | ||||||
|  |           weight = stabilizedWeight; | ||||||
|  |           Serial.printf("API weight updated: %d\n", weight); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // Debug output for monitoring (can be removed in production) | ||||||
|  |         static unsigned long lastDebugTime = 0; | ||||||
|  |         if (currentTime - lastDebugTime > 2000) { // Print every 2 seconds | ||||||
|  |           Serial.printf("Raw: %.2f, Filtered: %.2f, Display: %d, API: %d\n",  | ||||||
|  |                        rawWeight, filteredWeight, lastDisplayedWeight, weight); | ||||||
|  |           lastDebugTime = currentTime; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         lastMeasurementTime = currentTime; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     vTaskDelay(pdMS_TO_TICKS(100)); |     vTaskDelay(pdMS_TO_TICKS(10)); // Shorter delay for more responsive loop | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -125,6 +258,9 @@ void start_scale(bool touchSensorConnected) { | |||||||
|   //vTaskDelay(pdMS_TO_TICKS(5000)); |   //vTaskDelay(pdMS_TO_TICKS(5000)); | ||||||
|   //scale.tare(); |   //scale.tare(); | ||||||
|  |  | ||||||
|  |   // Initialize weight stabilization filter | ||||||
|  |   resetWeightFilter(); | ||||||
|  |  | ||||||
|   // Display Gewicht |   // Display Gewicht | ||||||
|   oledShowWeight(0); |   oledShowWeight(0); | ||||||
|  |  | ||||||
| @@ -209,6 +345,7 @@ uint8_t calibrate_scale() { | |||||||
|       oledShowProgressBar(2, 3, "Scale Cal.", "Remove weight"); |       oledShowProgressBar(2, 3, "Scale Cal.", "Remove weight"); | ||||||
|  |  | ||||||
|       scale.set_scale(newCalibrationValue); |       scale.set_scale(newCalibrationValue); | ||||||
|  |       resetWeightFilter(); // Reset filter after calibration | ||||||
|       for (uint16_t i = 0; i < 2000; i++) { |       for (uint16_t i = 0; i < 2000; i++) { | ||||||
|         yield(); |         yield(); | ||||||
|         vTaskDelay(pdMS_TO_TICKS(1)); |         vTaskDelay(pdMS_TO_TICKS(1)); | ||||||
|   | |||||||
| @@ -9,6 +9,13 @@ uint8_t start_scale(bool touchSensorConnected); | |||||||
| uint8_t calibrate_scale(); | uint8_t calibrate_scale(); | ||||||
| uint8_t tareScale(); | uint8_t tareScale(); | ||||||
|  |  | ||||||
|  | // Weight stabilization functions | ||||||
|  | void resetWeightFilter(); | ||||||
|  | float calculateMovingAverage(); | ||||||
|  | float applyLowPassFilter(float newValue); | ||||||
|  | int16_t processWeightReading(float rawWeight); | ||||||
|  | int16_t getFilteredDisplayWeight(); | ||||||
|  |  | ||||||
| extern HX711 scale; | extern HX711 scale; | ||||||
| extern int16_t weight; | extern int16_t weight; | ||||||
| extern uint8_t weigthCouterToApi; | extern uint8_t weigthCouterToApi; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user