Compare commits
	
		
			3 Commits
		
	
	
		
			v1.4.13
			...
			a450d4bd1a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a450d4bd1a | |||
| d48d994c00 | |||
| 32bb85f897 | 
| @@ -1,5 +1,13 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## [1.4.14] - 2025-03-30 | ||||||
|  | ### Added | ||||||
|  | - add auto-tare functionality and update scale handling based on touch sensor connection | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update platformio.ini for version v1.4.14 | ||||||
|  |  | ||||||
|  |  | ||||||
| ## [1.4.13] - 2025-03-30 | ## [1.4.13] - 2025-03-30 | ||||||
| ### Changed | ### Changed | ||||||
| - update platformio.ini for version v1.4.13 | - update platformio.ini for version v1.4.13 | ||||||
|   | |||||||
| @@ -55,6 +55,7 @@ | |||||||
|                 <h5 class="card-title">Sacle Calibration</h5> |                 <h5 class="card-title">Sacle Calibration</h5> | ||||||
|                 <button id="calibrateBtn" class="btn btn-primary">Calibrate Scale</button> |                 <button id="calibrateBtn" class="btn btn-primary">Calibrate Scale</button> | ||||||
|                 <button id="tareBtn" class="btn btn-secondary">Tare Scale</button> |                 <button id="tareBtn" class="btn btn-secondary">Tare Scale</button> | ||||||
|  |                    Enable Auto-TARE <input type="checkbox" id="autoTareCheckbox" onchange="setAutoTare(this.checked);" {{autoTare}}> | ||||||
|                 <div id="statusMessage" class="mt-3"></div> |                 <div id="statusMessage" class="mt-3"></div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
| @@ -140,6 +141,15 @@ | |||||||
|             })); |             })); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         // Add auto-tare function | ||||||
|  |         function setAutoTare(enabled) { | ||||||
|  |             ws.send(JSON.stringify({ | ||||||
|  |                 type: 'scale', | ||||||
|  |                 payload: 'setAutoTare', | ||||||
|  |                 enabled: enabled | ||||||
|  |             })); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         // WebSocket-Verbindung beim Laden der Seite initiieren |         // WebSocket-Verbindung beim Laden der Seite initiieren | ||||||
|         connectWebSocket(); |         connectWebSocket(); | ||||||
|     </script> |     </script> | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
| ; https://docs.platformio.org/page/projectconf.html | ; https://docs.platformio.org/page/projectconf.html | ||||||
|  |  | ||||||
| [common] | [common] | ||||||
| version = "1.4.13" | version = "1.4.14" | ||||||
| to_old_version = "1.4.0" | to_old_version = "1.4.0" | ||||||
|  |  | ||||||
| ## | ## | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ def copy_file(input_file, output_file): | |||||||
|  |  | ||||||
| def should_compress(file): | def should_compress(file): | ||||||
|      # Skip compression for spoolman.html |      # Skip compression for spoolman.html | ||||||
|     if file == 'spoolman.html': |     if file == 'spoolman.html' or file == 'waage.html': | ||||||
|         return False |         return False | ||||||
|     # Komprimiere nur bestimmte Dateitypen |     # Komprimiere nur bestimmte Dateitypen | ||||||
|     return file.endswith(('.js', '.png', '.css', '.html')) |     return file.endswith(('.js', '.png', '.css', '.html')) | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -48,16 +48,6 @@ void setup() { | |||||||
|   // NFC Reader |   // NFC Reader | ||||||
|   startNfc(); |   startNfc(); | ||||||
|  |  | ||||||
|   // Scale |  | ||||||
|   start_scale(); |  | ||||||
|  |  | ||||||
|   // WDT initialisieren mit 10 Sekunden Timeout |  | ||||||
|   bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus |  | ||||||
|   esp_task_wdt_init(10, panic); |  | ||||||
|  |  | ||||||
|   // Aktuellen Task (loopTask) zum Watchdog hinzufügen |  | ||||||
|   esp_task_wdt_add(NULL); |  | ||||||
|  |  | ||||||
|   // Touch Sensor |   // Touch Sensor | ||||||
|   pinMode(TTP223_PIN, INPUT_PULLUP); |   pinMode(TTP223_PIN, INPUT_PULLUP); | ||||||
|   if (digitalRead(TTP223_PIN) == LOW)  |   if (digitalRead(TTP223_PIN) == LOW)  | ||||||
| @@ -65,6 +55,16 @@ void setup() { | |||||||
|     Serial.println("Touch Sensor is connected"); |     Serial.println("Touch Sensor is connected"); | ||||||
|     touchSensorConnected = true; |     touchSensorConnected = true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   // Scale | ||||||
|  |   start_scale(touchSensorConnected); | ||||||
|  |  | ||||||
|  |   // WDT initialisieren mit 10 Sekunden Timeout | ||||||
|  |   bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus | ||||||
|  |   esp_task_wdt_init(10, panic); | ||||||
|  |  | ||||||
|  |   // Aktuellen Task (loopTask) zum Watchdog hinzufügen | ||||||
|  |   esp_task_wdt_add(NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -179,6 +179,16 @@ void loop() { | |||||||
|   { |   { | ||||||
|     lastWeightReadTime = currentMillis; |     lastWeightReadTime = currentMillis; | ||||||
|  |  | ||||||
|  |     // Prüfen ob die Waage korrekt genullt ist | ||||||
|  |     if (autoTare && (weight > 0 && weight < 5) || weight < 0) | ||||||
|  |     { | ||||||
|  |       scale_tare_counter++; | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       scale_tare_counter = 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // Prüfen ob das Gewicht gleich bleibt und dann senden |     // Prüfen ob das Gewicht gleich bleibt und dann senden | ||||||
|     if (weight == lastWeight && weight > 5) |     if (weight == lastWeight && weight > 5) | ||||||
|     { |     { | ||||||
|   | |||||||
| @@ -14,6 +14,7 @@ TaskHandle_t ScaleTask; | |||||||
| int16_t weight = 0; | int16_t weight = 0; | ||||||
|  |  | ||||||
| uint8_t weigthCouterToApi = 0; | uint8_t weigthCouterToApi = 0; | ||||||
|  | uint8_t scale_tare_counter = 0; | ||||||
| bool scaleTareRequest = false; | bool scaleTareRequest = false; | ||||||
| uint8_t pauseMainTask = 0; | uint8_t pauseMainTask = 0; | ||||||
| uint8_t scaleCalibrated = 1; | uint8_t scaleCalibrated = 1; | ||||||
| @@ -21,8 +22,23 @@ uint8_t scaleCalibrated = 1; | |||||||
| Preferences preferences; | Preferences preferences; | ||||||
| const char* NVS_NAMESPACE = "scale"; | const char* NVS_NAMESPACE = "scale"; | ||||||
| const char* NVS_KEY_CALIBRATION = "cal_value"; | const char* NVS_KEY_CALIBRATION = "cal_value"; | ||||||
|  | const char* NVS_KEY_AUTOTARE = "auto_tare"; | ||||||
|  | bool autoTare = true; | ||||||
|  |  | ||||||
| // ##### Funktionen für Waage ##### | // ##### Funktionen für Waage ##### | ||||||
|  | uint8_t setAutoTare(bool autoTareValue) { | ||||||
|  |   Serial.print("Set AutoTare to "); | ||||||
|  |   Serial.println(autoTareValue); | ||||||
|  |   autoTare = autoTareValue; | ||||||
|  |  | ||||||
|  |   // Speichern mit NVS | ||||||
|  |   preferences.begin(NVS_NAMESPACE, false); // false = readwrite | ||||||
|  |   preferences.putBool(NVS_KEY_AUTOTARE, autoTare); | ||||||
|  |   preferences.end(); | ||||||
|  |  | ||||||
|  |   return 1; | ||||||
|  | } | ||||||
|  |  | ||||||
| uint8_t tareScale() { | uint8_t tareScale() { | ||||||
|   Serial.println("Tare scale"); |   Serial.println("Tare scale"); | ||||||
|   scale.tare(); |   scale.tare(); | ||||||
| @@ -38,6 +54,14 @@ void scale_loop(void * parameter) { | |||||||
|   for(;;) { |   for(;;) { | ||||||
|     if (scale.is_ready())  |     if (scale.is_ready())  | ||||||
|     { |     { | ||||||
|  |       // Waage automatisch Taren, wenn zu lange Abweichung | ||||||
|  |       if (autoTare && scale_tare_counter >= 5)  | ||||||
|  |       { | ||||||
|  |         Serial.println("Auto Tare scale"); | ||||||
|  |         scale.tare(); | ||||||
|  |         scale_tare_counter = 0; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       // Waage manuell Taren |       // Waage manuell Taren | ||||||
|       if (scaleTareRequest == true)  |       if (scaleTareRequest == true)  | ||||||
|       { |       { | ||||||
| @@ -57,13 +81,20 @@ void scale_loop(void * parameter) { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void start_scale() { | void start_scale(bool touchSensorConnected) { | ||||||
|   Serial.println("Prüfe Calibration Value"); |   Serial.println("Prüfe Calibration Value"); | ||||||
|   float calibrationValue; |   float calibrationValue; | ||||||
|  |  | ||||||
|   // NVS lesen |   // NVS lesen | ||||||
|   preferences.begin(NVS_NAMESPACE, true); // true = readonly |   preferences.begin(NVS_NAMESPACE, true); // true = readonly | ||||||
|   calibrationValue = preferences.getFloat(NVS_KEY_CALIBRATION, defaultScaleCalibrationValue); |   calibrationValue = preferences.getFloat(NVS_KEY_CALIBRATION, defaultScaleCalibrationValue); | ||||||
|  |    | ||||||
|  |   // auto Tare | ||||||
|  |   // Wenn Touch Sensor verbunden, dann autoTare auf false setzen | ||||||
|  |   // Danach prüfen was in NVS gespeichert ist | ||||||
|  |   autoTare = (touchSensorConnected) ? false : true; | ||||||
|  |   autoTare = preferences.getBool(NVS_KEY_AUTOTARE, autoTare); | ||||||
|  |  | ||||||
|   preferences.end(); |   preferences.end(); | ||||||
|  |  | ||||||
|   Serial.print("Read Scale Calibration Value "); |   Serial.print("Read Scale Calibration Value "); | ||||||
|   | |||||||
| @@ -4,17 +4,19 @@ | |||||||
| #include <Arduino.h> | #include <Arduino.h> | ||||||
| #include "HX711.h" | #include "HX711.h" | ||||||
|  |  | ||||||
|  | uint8_t setAutoTare(bool autoTareValue); | ||||||
| uint8_t start_scale(); | uint8_t start_scale(bool touchSensorConnected); | ||||||
| uint8_t calibrate_scale(); | uint8_t calibrate_scale(); | ||||||
| uint8_t tareScale(); | uint8_t tareScale(); | ||||||
|  |  | ||||||
| extern HX711 scale; | extern HX711 scale; | ||||||
| extern int16_t weight; | extern int16_t weight; | ||||||
| extern uint8_t weigthCouterToApi; | extern uint8_t weigthCouterToApi; | ||||||
|  | extern uint8_t scale_tare_counter; | ||||||
| extern uint8_t scaleTareRequest; | extern uint8_t scaleTareRequest; | ||||||
| extern uint8_t pauseMainTask; | extern uint8_t pauseMainTask; | ||||||
| extern uint8_t scaleCalibrated; | extern uint8_t scaleCalibrated; | ||||||
|  | extern bool autoTare; | ||||||
|  |  | ||||||
| extern TaskHandle_t ScaleTask; | extern TaskHandle_t ScaleTask; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -75,6 +75,10 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventTyp | |||||||
|                 success = calibrate_scale(); |                 success = calibrate_scale(); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             if (doc["payload"] == "setAutoTare") { | ||||||
|  |                 success = setAutoTare(doc["enabled"].as<bool>()); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             if (success) { |             if (success) { | ||||||
|                 ws.textAll("{\"type\":\"scale\",\"payload\":\"success\"}"); |                 ws.textAll("{\"type\":\"scale\",\"payload\":\"success\"}"); | ||||||
|             } else { |             } else { | ||||||
| @@ -203,10 +207,14 @@ void setupWebserver(AsyncWebServer &server) { | |||||||
|     // Route für Waage |     // Route für Waage | ||||||
|     server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){ |     server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){ | ||||||
|         Serial.println("Anfrage für /waage erhalten"); |         Serial.println("Anfrage für /waage erhalten"); | ||||||
|         AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/waage.html.gz", "text/html"); |         //AsyncWebServerResponse *response = request->beginResponse(LittleFS, "/waage.html.gz", "text/html"); | ||||||
|         response->addHeader("Content-Encoding", "gzip"); |         //response->addHeader("Content-Encoding", "gzip"); | ||||||
|         response->addHeader("Cache-Control", CACHE_CONTROL); |         //response->addHeader("Cache-Control", CACHE_CONTROL); | ||||||
|         request->send(response); |  | ||||||
|  |         String html = loadHtmlWithHeader("/waage.html"); | ||||||
|  |         html.replace("{{autoTare}}", (autoTare) ? "checked" : ""); | ||||||
|  |  | ||||||
|  |         request->send(200, "text/html", html); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     // Route für RFID |     // Route für RFID | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user