SOLUCIONADO agregar teclado matricial y comparar con dato serial

Compañeros Buen dia:
Anteriormente tenia un problema en el proyecto que fue resuelto con mucha rapidez por los amigos del foro dejo el enlace para ir explicando paso a pasocomo se desarrolla el proyecto

Ahora avanzando les explico cual es el proyecto final.
Una balanza me envia datos de peso continuamente al arduino, con el teclado matricial digito un determinado peso ejem(15.00 kg), luego presiono un boton y enciende un led mientras voy llenando la balanza, cuando el peso de la balanza sea mayor al peso digitado en el teclado el led se apaga.
El detalle esta en como guardar en un variable el peso digitado y luego compararlo con el dato serie para apagar un led.
luegopienso conectarle a los led un optocoplador junto con un triac y algun contactor pues pienso conectar un motor trifasico que consume 19 amperios.
Aun no uno el peso del teclado con el puerto serie porque me sale error, pero el codigo avanzado es el siguiente.

#include <Keypad.h>
const byte Filas = 4; //KeyPad de 4 filas
const byte Cols = 4; //y 4 columnas
//byte Pins_Filas[] = {13, 12, 11, 10}; //Pines Arduino para las filas.
//byte Pins_Cols[] = {7, 6, 5, 4}; // Pines Arduino para las columnas.
byte Pins_Filas[] = {9,8,7,6}; //Pines Arduino para las filas.
byte Pins_Cols[] = {5,4,3,2}; // Pines Arduino para las columnas.

char pulsacion;
String PIN_Tecleado = "";
 
char Teclas [Filas][Cols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
 
//encender led//

const int pinled = 12;
const int boton = 11;

int botonestado = 0;
int estadoled = 0;

//CONFIGURACION PARA EL DATO SERIE//
   
float numero;


void setup() {
  
pinMode(pinled, OUTPUT);
pinMode(boton, INPUT);
 
 Serial.begin(9600);
}
void loop() {

 botonestado = digitalRead(boton);
 
 if( botonestado ==HIGH){
  digitalWrite(pinled, HIGH);
 }

 pulsacion = Teclado1.getKey();
  if (pulsacion) { // Si se ha pulsado una tecla.
    if (pulsacion >= '0' && pulsacion <= '9' ){ // Si la pulsación es un dígito de 0 a 9 y hay menos de 4 dígitos en la clave.
      
      PIN_Tecleado += pulsacion;
      Serial.print(pulsacion); //¿Como guardar los numeros digitados y compararlos?
    }

if(Serial.available()> 0){
  numero = Serial.parseFloat();

  if(numero > pulsacion){
  digitalWrite(pinled, LOW);
  Serial.println(numero);
  Serial.flush();
  
  }
}
  }
  }

Porque creas 1, 2 , 3 mensajes con el mismo tema? Concentra todos en la misma consulta. Tu celda de carga y todo lo que ello involucre.

Te da error dices pero no pones cual?

pensaba que las reglas era por diferente tema, pero ya se que una sola pregunta puede involucrar todo el tema, una disculpa compañeros la verdad soy nuevo en el foro.
el error es que no apaga el led, ni imprime el peso en el monitor serial.

Bueno vi que el anterior estaba cerrado asi que olvida mi comentario.
SIgamos aquí pero imagina que tienes un problema con muchas aristas bueno dale caracter de proyecto y vas avanzando y quien lo lee entenderá con los problemas que fuiste resolviendo o consultando. Asi queda descolgado.
Como yo sigo todo, veo que tienen conexion. Una pena porque veo la conexión.
Edita el primer post y pon un enlace a tus otros temas para que queden de algun modo enlazados y has una breve reseña. Me comprendes. La idea es beneficiar a todos.

En un rato veo como ayudarte

listo compañero, edite el primer post agregandole el enlace del tema anterior. Aun espero una ayuda

Prueba a ver si puedes volcar a otro float la introducción por teclado con algo así:

	pulsacion = Teclado1.getKey();
	switch (pulsacion) {
	case '.': // Punto decimal
	case '0' ... '9': // o dígitos, 
		PIN_Tecleado += pulsacion; // los agregamos a la cadena
		break;
	case '#': // Lo tomaremos como enter
		pesoEstablecido = atof(PIN_Tecleado.toCharArray); // pesoEstablecido es un float.
		break;
	case '*': // lo tomaremos como borrar todo
		PIN_Tecleado = "'';
		break;
	// ¿qué hacemos con el resto de teclas?
	}

Luego, comparar dos float no debería ser difícil.

compañero en la linea

pesoEstablecido = atof(PIN_Tecleado.toCharArray); // pesoEstablecido es un float.

me arroja el siguiente error al compilarlo...creo que es la conversion de float...

"cannot convert 'String::toCharArray' from type 'void (String::)(char*, unsigned int, unsigned int)const' to type 'const char*'"

Busca un poco park, o esperas que todo te lo hagan.
Busca atof y mira como se puede resolver el fallo.
Google: arduino atof

char floatbuf[32]; // make this at least big enough for the whole string
curLongitude.toCharArray(floatbuf, sizeof(floatbuf));
float f = atof(floatbuf);

Debes poner las salidas de error entre etiquetas de código también, para evitar que salgan "muñequitos".

Cambia la línea a :

pesoEstablecido=atof(PIN_Tecleado.c_str());

A ver si mejora la cosa

Compañeros consegui imprimir el arrray de teclas, por ejemplo si digito 36 y presiono # aparece 36.00
y asi con todos los numeros enteros, pero el problema es cuando quiero poner decimales, pues si quiero imprimir 36.55 me imprime 55.00.
Aun asi probe el codigo guardando la parte entera, pero no compara con los datos del monitor serial.
Les explico:
digito 36.00 presiono # para guardar el array.
luego presiono el boton para encender el led y se enciende.
voy aumentando el peso en la balanza.
Se supone que cuando llege a 36.00 kg, el led se debe apagar pero no lo ase.
Adjunto el codigo:

#include <Keypad.h>


const byte Filas = 4; //KeyPad de 4 filas
const byte Cols = 4; //y 4 columnas
//byte Pins_Filas[] = {13, 12, 11, 10}; //Pines Arduino para las filas.
//byte Pins_Cols[] = {7, 6, 5, 4}; // Pines Arduino para las columnas.
byte Pins_Filas[] = {9,8,7,6}; //Pines Arduino para las filas.
byte Pins_Cols[] = {5,4,3,2}; // Pines Arduino para las columnas.

char pulsacion;
String PIN_Tecleado = "";
float pesoEstablecido ;
float numero;

char cadena[9];  //para poder hacer la conversion a número
 
char Teclas [Filas][Cols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'.','0','#','.'}
};
 
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
 
//encender led//

const int pinled = 12;
const int boton = 11;

int botonestado = 0;
int estadoled = 0;

//CONFIGURACION PARA EL DATO SERIE//
   



void setup() {
  
pinMode(pinled, OUTPUT);
pinMode(boton, INPUT);
 
 Serial.begin(9600);
}
void loop() {

 botonestado = digitalRead(boton);
 
 if( botonestado ==HIGH){
  digitalWrite(pinled, HIGH);
 }


  pulsacion = Teclado1.getKey();
  
  switch (pulsacion) {
  case '.': // Punto decimal
  case '0' ... '9': // o dígitos, 
    PIN_Tecleado += pulsacion; // los agregamos a la cadena
    break;
    
 // case '#': // Lo tomaremos como enter
   //pesoEstablecido = atof(PIN_Tecleado.toCharArray); // pesoEstablecido es un float.
    //break;
    
 case '#': // Lo tomaremos como enter para guardar el dato
 PIN_Tecleado.toCharArray( cadena,9);
 pesoEstablecido = atol (cadena);
 Serial.println(pesoEstablecido);   
 break;

 case 'A' : //Al presionar el boton el led se debe encender
 botonestado = digitalRead(boton);
 
 if( botonestado ==HIGH){
  digitalWrite(pinled, HIGH);
  numero = Serial.parseFloat();

  if(numero > pesoEstablecido){ // Si el peso del monitor serial es mayor a peso establesido
                                //el led se debe apagar
  digitalWrite(pinled, LOW);
  Serial.println(numero);
  Serial.flush();
  }
  break;
 }
    
  case 'D': // lo tomaremos como borrar todo
    PIN_Tecleado = "";
    break;
  // ¿qué hacemos con el resto de teclas?

  
  }
}

Surbyte compañero, en la respuesta anterior esta mi investigacion pues buscando encontre algo que me ayudo, solo que aun tiene problemas

case '#': // Lo tomaremos como enter para guardar el dato
 PIN_Tecleado.toCharArray( cadena,9);
 pesoEstablecido = atol (cadena);  // Este es el problema, debes usar atof
 Serial.println(pesoEstablecido);   
 break;

si conviertes ascii a enteros recibes tu respuesta.
Debes ser atof

compañeros el proyectos ya esta funcionando,tuve que hacer unas modificaciones y saber donde posicionar algunos datos, muchas gracias surbyte y noter, por quitarles un poco de su tiempo
Adjunto el codigo ya terminado y disculpen por los errores es que soy nuevo en el foro

#include <Keypad.h>


const byte Filas = 4; //KeyPad de 4 filas
const byte Cols = 4; //y 4 columnas
byte Pins_Filas[] = {9,8,7,6}; //Pines Arduino para las filas.
byte Pins_Cols[] = {5,4,3,2}; // Pines Arduino para las columnas.

char pulsacion; 
String PIN_Tecleado = ""; // teclas digitadas
float pesoEstablecido ; // cadena de datos digitados a travez del teclado
float numero; // datos de peso del puerto serie
const int pinled = 12; //encender led//

char cadena[17];  //para poder hacer la conversion a número
 
char Teclas [Filas][Cols] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'.','0','#','D'}
};
 
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols);
 


void setup() {
  
pinMode(pinled, OUTPUT);
//pinMode(boton, INPUT);
 
 Serial.begin(9600);
}
void loop() {

  pulsacion = Teclado1.getKey();
  
  switch (pulsacion) {
  case '.': // Punto decimal
  delay(30);
  
  case '0' ... '9': // o dígitos,
  delay(30);  
  PIN_Tecleado += pulsacion; // los agregamos a la cadena
  break;
    
 case '#': // Lo tomaremos como enter para guardar el dato
 delay(30);
 PIN_Tecleado.toCharArray( cadena,17);
 pesoEstablecido = atof (cadena);
 Serial.println(pesoEstablecido);   
 break;

 case 'A' : //Al presionar el boton el led se debe encender
 delay(30);
 digitalWrite(pinled, HIGH);
 break;

    
  case 'D': // lo tomaremos como borrar todo
  delay(30);
  PIN_Tecleado = "";
  break;
  
 

  }

  if(Serial.available()> 0){
  numero = Serial.parseFloat();

  if(numero > pesoEstablecido){
  digitalWrite(pinled, LOW);
  Serial.println(numero);
  Serial.flush();

  }
  }  
  }