Compañeros tengo una consulta, estoy recibiendo datos continuos de peso de una balanza a un arduino, el problema esta en como haría para que al poner un peso en la balanza, arduino me imprima solo el dato que mas se repite, que vendría hacer el peso verdadero ya que es el que mas se repite y luego ya no imprima mas hasta que vuelva a cero y se ponga el otro peso y así consecutivamente, ya que son varios pesos y todos entran con movimiento( osea tiran el peso es por eso que quiero que se imprima el dato de peso que mas se repite).
De momento hice algo similar con ayuda de un compañero del foro, pero este código al momento de poner un peso que esta dentro de un determinado rango, espera dos segundos e imprime el peso, luego no imprime mas hasta que se saque el peso y se ponga otro peso y así consecutivamente. Adjunto el codigo
char inChar;
String inString="";
float Peso;
float PesoMinimo = 4.0;
float PesoMaximo = 6.0;
unsigned long start;
boolean verificar = true;
byte estado = 0;
void setup() {
Serial.begin(9600); // Abrimos la comunicación serial
delay(100);
}
void loop() {
LeerBalanza();
switch (estado) {
case 0:
if (Peso > 0 ) // Si peso es positivo sigo
estado = 1;
else {
estado = 0;
verificar = true; //hasta que el peso no sea cero nuevamente, no sigo
}
break;
case 1:
if (Peso >= PesoMinimo && Peso <= PesoMaximo && verificar == true) { // Hay lectura de pesada
Serial.print("Peso 1 = "); //imprimo el primer peso
Serial.println(Peso);
estado = 2; // Primer paso okay
start = millis()+2000UL; // para luego comparar los 2000 mseg
}
else{
estado = 0;
}
break;
case 2:
if (millis() > start) { // pasaron 2 seg verificar valor
if (Peso >= PesoMinimo && Peso <= PesoMaximo) { // Hay lectura de pesada
Serial.print("Peso 2 = "); //imprimo el primer peso
Serial.println(Peso);
estado = 3;
}
else {
Serial.print("Este peso esta fuera del rango: "); //Si el peso ya no se encuentra dentro del rango envia un mensaje de aviso
Serial.println(Peso);
estado = 0;
}
}
break;
case 3:
estado = 0;
verificar = false; //hasta que el peso no sea cero nuevamente, no sigo
break;
}
}
void LeerBalanza(){
if (Serial.available()) {
inChar = Serial.read();
if (isDigit(inChar) || inChar == '.' || inChar == '-') {
inString += inChar;
}
if (inChar == '\n') {
Peso = inString.toFloat();
inString = ""; // borramos el String para un nueva entrada
}
}
}