Celda de carga que mantenga el valor y reset

Muy buenas tardes a todos .
Estoy queriendo hacer una balanza que retenga el peso y luego resetear con boton

no estoy pudiendo hacer que retenga el peso

Alguien me puede ayudar

Sube tu código para ver dónde se le puede meter mano

Perdon soy nuevo

#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Pines para el HX711
#define LOADCELL_DOUT_PIN  3
#define LOADCELL_SCK_PIN   2

HX711 scale;

LiquidCrystal_I2C lcd(27, 16, 2); 


const int buttonPin = 7;
int buttonState = 0 ;


float maxWeight = 0.00;
float currentWeight = 0.00;

void setup() {

  Serial.begin(9600);
  lcd.backlight();

  
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  

  lcd.init();
  lcd.backlight();
  
  pinMode(buttonPin, INPUT_PULLUP); 
}

void loop() {
  currentWeight = scale.get_units(10); 
  
  if (currentWeight > maxWeight) {
    maxWeight = currentWeight;
  }
  
  lcd.setCursor(0,00);
  lcd.print("Peso: ");
  lcd.print(currentWeight, 2); 
  lcd.print(" kg");
  
  lcd.setCursor(0,00);
  lcd.print("Max: ");
  lcd.print(maxWeight, 2); 
  lcd.print(" kg");
  
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {
    delay(200);
    maxWeight = 0.00;
  }
  
  delay(100); 
}

Moderador:
Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)


Ahora si, hice algunos ajustes, consiguiendo que el reset funciones y mantenga el peso maximo, pero queda midiendo cualquier cosa despues de apretar el boton,

Este es el codigo

#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Pines para el HX711
#define LOADCELL_DOUT_PIN  3
#define LOADCELL_SCK_PIN   2

HX711 scale;

LiquidCrystal_I2C lcd(0x27, 16, 2); 


const int buttonPin = 7;
int buttonState = 0 ;


float maxWeight = 0.00;
float currentWeight = 0.00;

void setup() {

  Serial.begin(9600);
  lcd.backlight();

  
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  

  lcd.init();
  lcd.backlight();
  
  pinMode(buttonPin, INPUT_PULLUP); 
}

void loop() {
  currentWeight = scale.get_units(10); 
  
  if (currentWeight > maxWeight) {
    maxWeight = currentWeight;
  }
  
lcd.setCursor(0,00);
  lcd.print("Max: ");
  lcd.print(maxWeight, 2); 
  lcd.print(" kg");
  
  
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {
    maxWeight = 0.00;
    delay(1000);
}
}

En la simulación funciona, solo tuve que hacer un ajuste en la medición.

currentWeight = scale.get_units(10)/420.0;

Como estas Maximo, muchas gracias, sos lo mas.
Recien aprendiendo de esto y del foro.
Lo pruebo a la tarde y te aviso.
Nuevamente gracias

Como estas MAximo, no estoy entendiendo como escalarla, funciona todo con el codigo que me diste, o corregiste, el tema que en vez de 0 me marca 112.31 Kg
Capaz es relevante y no lo tuve en cuenta que la celda es de 50 kG
Gracias

Lo que hice en la simulación es dividir el valor a fondo de escala por los kg, eso dió 420 entonces get_units(10)/420.0 me da los kg, es una simple regla de 3.
Para 50kg, en la simulación, sigue siendo 420 el factor de división.

Lo mejor es que leas la documentación de la librería porque creo que además te falta hacer la calibración.

gracias a todos por la ayuda.
con el codigo que muestro me dio el factor

#include "HX711.h"

#define DOUT  3
#define CLK  2

HX711 scale;

void setup() {
  Serial.begin(9600);
  scale.begin(DOUT, CLK);
  scale.set_scale();    // Establece la escala a la predeterminada
  scale.tare();         // Reset de la balanza a 0
  Serial.println("Coloca un peso conocido en la celda de carga y anota el valor mostrado.");
}

void loop() {
  Serial.print("Lectura sin escalar: ");
  Serial.println(scale.get_units(10), 1); // Promedia 10 lecturas
  delay(500);
}

me dio el valor 83977 el cual lo puse en la escala armando este codigo

#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Pines para el HX711
#define LOADCELL_DOUT_PIN  3
#define LOADCELL_SCK_PIN   2

HX711 scale;

LiquidCrystal_I2C lcd(0x27, 16, 2);


const int buttonPin = 7;
int buttonState = 0 ;


float maxWeight = 0.00;
float currentWeight = 0.00;

void setup() {

  Serial.begin(9600);
  lcd.backlight();


  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);


  lcd.init();
  lcd.backlight();

  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  currentWeight = scale.get_units(1)/(83977);

  if (currentWeight > maxWeight) {
    maxWeight = currentWeight;
  }
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {

    maxWeight = 0.00;

    delay(1000);

  }


  lcd.setCursor(0, 00);
  lcd.print("Max: ");
  lcd.print(maxWeight, 2);
  lcd.print(" kg");

  delay(100);

}

lo que no estoy viendo porque me marca 0.56 KG cuando aprieto el pulsador dice 0 pero despues se pasa a 0.56.
pongo 1 kg y me da 1.56 es decir que el escalado esta bien, pero no encuentro el error de ese bendito 0.56

ya casi señores...... estoy agradecido

Y si restas 0.56 del valor leído qué resultados te dá?

cuando aprieto el boton me da -0.56 y si lo suelto se vielve a 0.56

Pero cuando aprietas el botón te tiene que mostrar 0.00 porque

maxWeight = 0.00;

Lo que veo es un problema con ese delay de 1 seg cuando pulsas el botón porque por 1 seg no te muestra nada nuevo y luego solo ves 0.00 durante 100 mseg e inmediatamente ves la nueva lectura.
Salvo que dentro del if() también muestres el valor de maxWeight durante ese segundo, aunque solo sea algo "estético".

No tengo una celda de carga como para probar en físico, solo lo puedo simular y claramente no es lo mismo en este caso.

Seguro que

currentWeight = scale.get_units(1)/(83977) - 0.56;

devuelve -0.56 cuando no pones peso?

Porque en #10 dijiste que para 0 te muestra 0.56 y para 1 te muestra 1.56 entonces hay un offset de 0.56 que debería desaparecer con la resta.

siiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
no me di cuenta de eso
muchisimas graciasssssssssssssssssssss
maestro a vos y todos los que participaron