Gracias Jose Luis....todo va con un arduino MEGA:
#include "max6675.h"
// ThermoCouple
int thermo_gnd_pin = 45;
int thermo_vcc_pin = 47;
int thermo_sck_pin = 49;
int thermo_cs_pin = 51;
int thermo_so_pin = 53;
MAX6675 thermocouple(thermo_sck_pin, thermo_cs_pin, thermo_so_pin);
int flag=0;
int FaD;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
Serial1.begin(115200);
Serial2.begin(115200);
pinMode(thermo_gnd_pin, OUTPUT);
pinMode(thermo_vcc_pin, OUTPUT);
digitalWrite(thermo_gnd_pin, LOW);
digitalWrite(thermo_vcc_pin, HIGH);
}
void loop() {
// rutina lee datos desde la Nextion y analiza la trama enviada
Serial.flush();
Serial1.flush();
Serial2.flush();
int array[16]; //inicializa arerglo para numeros,
while (Serial2.available()>0) { //mientras existan datos en el puerto serial
for (int i= 1 ; i< 16; i++){ //inicializa conteo de 1 a 8 (7datos)
array= Serial2.read(); //array i es igual a lo que lea por el serial
delay(20);
}
//Los eventos touch con boton normal envian 2 tramas, los dual boton 3 tramas siendo la ultima el dato que se envia
array[16]='\0'; //imprimira arreglo despues de un salto linea
int error=array[1]; //nombre del primer nibble del arreglo. Evento Touch (0x65=101)
int pagina=array[2]; //Id Pagina, en este caso 0
int componente=array[3]; //ID componenten en este caso 1
int eventopartes=array[4]; //Tipo evento touch(0x01 si presiona, 0x00 si release)
int dato1=array[5]; //0xff indican fin de tramna
int dato2=array[6]; //0xff indican fin de tramna
int dato3=array[7]; //0xff indican fin de tramna
int dato4=array[8]; //comienza otra trama con ID pagina
int dato5=array[9];
int dato6=array[10];
int dato7=array[11];
int dato8=array[12];
int dato9=array[13];
int dato10=array[14];
int dato11=array[15];
delay(5);
// Serial.println(error); //imprimen por el serial lo que esta llegando de la trama actual
// Serial.println(pagina);
// Serial.println(componente);
// Serial.println(eventopartes);
// Serial.println(dato1);
// Serial.println(dato2);
// Serial.println(dato3);
// Serial.println(dato4);
// Serial.println(dato5);
// Serial.println(dato6);
// Serial.println(dato7);
// Serial.println(dato8);
// Serial.println(dato9);
// Serial.println(dato10);
// Serial.println(dato11);
if (pagina ==0 && componente == 2 && flag ==0){ //si tenemos un evento de la pagina 0 y el componente ID=2 (el unico boton de la pagina) y no ha sido activada la bandera
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
flag = flag + 1; //suma una a la bandera
componente=0;
delay(1000);
}
else
if (pagina ==0 && componente == 2 && flag ==1){ // si se vuelve a presionar el boton en nextion y la bandera tiene 1
digitalWrite(LED_BUILTIN, LOW); // turn the LED on (HIGH is the voltage level)
flag=0;
componente=0;
delay(1000);
}
if (pagina ==0 && componente == 5){ // Verifica que el dual boton se presiono y envia el dato digitado en pantalla con conteo.
for (int i= 0 ; i< dato11; i++){
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
Serial2.print("t0.txt=\"");
Serial2.print(i+1);
Serial2.print("\"");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
delay(200);
}
delay(500);
Serial2.print("t0.txt=\"");
Serial2.print("0");
Serial2.print("\"");
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
delay(50);
}
}
// Envia temperatura como string a Pantalla Nextion por el Serial2 (pines Tx:16, Rx:15) Arduino MEGA.
Serial.flush();
Serial1.flush();
Serial2.flush();
delay(50);
float lec_T=float(thermocouple.readCelsius()); //valor decimal para enviar a pantalla
Serial2.print("t0.txt=\""); //envia a pantalla con formato para texto
//Serial2.print(thermocouple.readCelsius()); //envia como texto
Serial2.print(lec_T); //envia valor tmperatura a pantalla
Serial2.print("\"");
Serial2.write(0xff); //envia 0xff como final de trama
Serial2.write(0xff);
Serial2.write(0xff);
delay(50);
// Fin Envia temperatura como string a Pantalla
// Envia temperatura al velocimetro
FaD = int( thermocouple.readCelsius());
Serial2.print("z0.val="); //envia valor numerico
Serial2.print(FaD-20); //se resta un valor para compensar el indicador del velocimetro
Serial.println(FaD);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
delay(500);
Serial2.flush();
}
Lo que hace es adquirir la temperatura con un MAX6675 para mostrarla en pantalla y esperar a que se pulse uno de los botones para prender el
led del arduino, en el caso del boton "blink pant" hace parpadear el led del arduino de acuerdo con el numero ingresado desde la Nextion
pulsando sobre el objeto "n0" , este esta configurado en la Nextion con un teclado numerico asi que al pulsarlo aparece el teclado pero
parpadea de tal forma que no se ven los numeros del teclado, esto solo ocurre cuando aparece el teclado numerico.
Te envio imagenes de la configuracion del objeto "n0" y el boton con el que se envia el valor de "n0" al arduino.