Error Enviar reloj Nextion

Hola, buenos dias.

Este es mi primer mensaje (no vi que hubiera presentaciones), estoy aprendiendo Arduino y despues de unos sketch e pruebas, etc… me he decidido a crear un control de una caravana con una pantalla nextion.

El caso es que no soy capaz de enviarle la hora a un campo de texto de la pantalla. Si que lo puedo leer en el erial pero no envairlo.

Disculpad si el codigo no es muy legible, para mi es bastante complicado ya que llevo muy poco con esto.

#include <doxygen.h>
#include <NexButton.h>
#include <NexCheckbox.h>
#include <NexConfig.h>
#include <NexCrop.h>
#include <NexDualStateButton.h>
#include <NexGauge.h>
#include <NexGpio.h>
#include <NexHardware.h>
#include <NexHotspot.h>
#include <NexNumber.h>
#include <NexObject.h>
#include <NexPage.h>
#include <NexPicture.h>
#include <NexProgressBar.h>
#include <NexRadio.h>
#include <NexRtc.h>
#include <NexScrolltext.h>
#include <NexSlider.h>
#include <NexText.h>
#include <NexTimer.h>
#include <Nextion.h>
#include <NexTouch.h>
#include <NexUpload.h>
#include <NexVariable.h>
#include <NexWaveform.h>


#include <Wire.h>
#include "ABlocks_DS3231rtc.h"
#define DS3231_I2C_ADDRESS 0x68

DS3231rtc rtc; //creamos objeto

String rtc_time_text(){
  char rtcbuffer[10];
  sprintf(rtcbuffer,"%02d:%02d:%02d", rtc.getHour(), rtc.getMinute(), rtc.getSecond() ); //Consultamos la hora
  return String(rtcbuffer);
}

String rtc_date_text(){
  char rtcbuffer[12];
  sprintf(rtcbuffer,"%02d/%02d/%04d", rtc.getDay(), rtc.getMonth(), (2000+rtc.getYear()) ); //Consultamos la fecha
  return String(rtcbuffer);
}

NexDSButton bt0 = NexDSButton(1, 1, "bt0");
NexDSButton bt1 = NexDSButton(1, 2, "bt1");
NexDSButton bt2 = NexDSButton(1, 3, "bt2");
NexDSButton bt3 = NexDSButton(1, 4, "bt3");
NexDSButton bt4 = NexDSButton(1, 5, "bt4");
NexDSButton bt5 = NexDSButton(1, 6, "bt5");
NexDSButton bt6 = NexDSButton(1, 7, "bt6");
NexDSButton bt7 = NexDSButton(1, 8, "bt7");
NexText reloj = NexText(0,3,"t0");




NexTouch *nex_listen_list[] = 
{
    &bt0,
    &bt1,
    &bt2,
    &bt3,
    &bt4,
    &bt5,
    &bt6,
    &bt7,
   
    NULL
};

void encender(){
  uint32_t estado;
 bt0.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(13,1);
  }else{
    digitalWrite(13,0); 
    }
  
}
void encender2(){
  uint32_t estado;
 bt1.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(12,1);
  }else{
    digitalWrite(12,0); 
    }
  
}

void encender3(){
  uint32_t estado;
 bt2.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(11,1);
  }else{
    digitalWrite(11,0); 
    }
  
}

void encender4(){
  uint32_t estado;
 bt3.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(10,1);
  }else{
    digitalWrite(10,0); 
    }
  
}

void encender5(){
  uint32_t estado;
 bt4.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(9,1);
  }else{
    digitalWrite(9,0); 
    }
  
}

void encender6(){
  uint32_t estado;
 bt5.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(8,1);
  }else{
    digitalWrite(8,0); 
    }
  
}

void encender7(){
  uint32_t estado;
 bt6.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(7,1);
  }else{
    digitalWrite(7,0); 
    }
  
}

void encender8(){
  uint32_t estado;
 bt7.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(6,1);
  }else{
    digitalWrite(6,0); 
    }
  
}
void setup() {

  nexInit();
  

 bt0.attachPush(encender);
  pinMode(13,OUTPUT);
 bt1.attachPush(encender2);
  pinMode(12,OUTPUT);
 bt2.attachPush(encender3);
  pinMode(11,OUTPUT);
 bt3.attachPush(encender4);
  pinMode(10,OUTPUT);
 bt4.attachPush(encender5);
  pinMode(9,OUTPUT);
 bt5.attachPush(encender6);
  pinMode(8,OUTPUT);
 bt6.attachPush(encender7);
  pinMode(7,OUTPUT);
 bt7.attachPush(encender8);
  pinMode(6,OUTPUT);

   Serial.begin(9600);
 
  rtc.begin(); //SDA conectado a pin A4 y SCL a A5

 //quitar este comentario para programar hora inicio. rtc.setTime(56,00,17,12,4,20); //Fecha inicial, dejar como comentario despues de programar por primera vez.

    byte buffer[2];
  
  // Leemos los registros de temperatura
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0x11); // La direccion de los registros de temperatura
  Wire.endTransmission();
  
  // Leemos 2 registros que son los unicos de temperatura
  Wire.requestFrom(DS3231_I2C_ADDRESS, 2); 
  
  // Leemos de a un byte a la vez
  buffer[0] = Wire.read();
  buffer[1] = Wire.read();

  // Mostramos la temperatura con DS3231 por el Monitor Serial
  if (buffer[0] < 0xFF) {  // Para evitar una falsa lectura que usualmente viene en 0xFF = -127C lo que es imposible
    
  //Quitar omentario para motrar temperatura lcd.print(String("") + (buffer[0]-2) + "." + (buffer[1]/64*25) + "C"); //Mostramos la temperatura Con una correccion de -2 grados, Se puede cambiar o quitarpara ajustar sonda temperatura
  }    

  // Leeremos la temperatura cada 1 segundo
  delay(1000);  
}



  


void loop() {

reloj.setText(rtc_time_text());  

   Serial.print(rtc_time_text()); // Mostramos hora 
   delay(1000);    
    
  Serial.print(rtc_date_text()); ///mostramos fecha
delay(1000);
  
  nexLoop(nex_listen_list);


  
}

interruptoresyhoraenserialerrorsetclock.ino (4.12 KB)

Bienvenido al foro, por favor edita el código para que se vea con etiquetas, en el loop lo has hecho pero con una sola linea.

En tu código solo envías la hora y fecha por serial, esa librería esta hecha para usar el serial2 usando un mega por lo que no lo estas enviando por puerto correcto, ademas no va a entender lo que le envías, necesitara un campo en el que mostrarlo y los comandos siempre acaban enviandole 0xff 0xff 0xff o puedes usar sendCommand() de la librería.

Muchas gracias por la ayuda, ¡Lo he conseguido!.

La libreria la modifique para conectar con arduino Uno.

Tuve que convertir el String que recoje la hora a un char, apuntar bien al contenedor de texto y despues le agregue los tres 0xff.

Sin los tres 0xff, tambien funciona. Supongo que la siguiente orden no se realizaria al no mandar el final de esta orden ¿Verdad?

#include <Nextion.h>
#include <Wire.h>
#include "ABlocks_DS3231rtc.h"
#define DS3231_I2C_ADDRESS 0x68

DS3231rtc rtc; //creamos objeto

String rtc_time_text(){
  char rtcbuffer[10];
  sprintf(rtcbuffer,"%02d:%02d:%02d", rtc.getHour(), rtc.getMinute(), rtc.getSecond() ); //Consultamos la hora
  return String(rtcbuffer);
}

String rtc_date_text(){
  char rtcbuffer[12];
  sprintf(rtcbuffer,"%02d/%02d/%04d", rtc.getDay(), rtc.getMonth(), (2000+rtc.getYear()) ); //Consultamos la fecha
  return String(rtcbuffer);
}

NexDSButton bt0 = NexDSButton(1, 1, "bt0");
NexDSButton bt1 = NexDSButton(1, 2, "bt1");
NexDSButton bt2 = NexDSButton(1, 3, "bt2");
NexDSButton bt3 = NexDSButton(1, 4, "bt3");
NexDSButton bt4 = NexDSButton(1, 5, "bt4");
NexDSButton bt5 = NexDSButton(1, 6, "bt5");
NexDSButton bt6 = NexDSButton(1, 7, "bt6");
NexDSButton bt7 = NexDSButton(1, 8, "bt7");
NexText reloj = NexText(0,3,"t0");




NexTouch *nex_listen_list[] = 
{
    &bt0,
    &bt1,
    &bt2,
    &bt3,
    &bt4,
    &bt5,
    &bt6,
    &bt7,
   
    NULL
};

void encender(){
  uint32_t estado;
 bt0.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(13,1);
  }else{
    digitalWrite(13,0); 
    }
  
}
void encender2(){
  uint32_t estado;
 bt1.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(12,1);
  }else{
    digitalWrite(12,0); 
    }
  
}

void encender3(){
  uint32_t estado;
 bt2.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(11,1);
  }else{
    digitalWrite(11,0); 
    }
  
}

void encender4(){
  uint32_t estado;
 bt3.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(10,1);
  }else{
    digitalWrite(10,0); 
    }
  
}

void encender5(){
  uint32_t estado;
 bt4.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(9,1);
  }else{
    digitalWrite(9,0); 
    }
  
}

void encender6(){
  uint32_t estado;
 bt5.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(8,1);
  }else{
    digitalWrite(8,0); 
    }
  
}

void encender7(){
  uint32_t estado;
 bt6.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(7,1);
  }else{
    digitalWrite(7,0); 
    }
  
}

void encender8(){
  uint32_t estado;
 bt7.getValue(&estado);

  if (estado== 1)
  {
    digitalWrite(6,1);
  }else{
    digitalWrite(6,0); 
    }
  
}

void setup() {
 
 nexInit();
    

 bt0.attachPush(encender);
  pinMode(13,OUTPUT);
 bt1.attachPush(encender2);
  pinMode(12,OUTPUT);
 bt2.attachPush(encender3);
  pinMode(11,OUTPUT);
 bt3.attachPush(encender4);
  pinMode(10,OUTPUT);
 bt4.attachPush(encender5);
  pinMode(9,OUTPUT);
 bt5.attachPush(encender6);
  pinMode(8,OUTPUT);
 bt6.attachPush(encender7);
  pinMode(7,OUTPUT);
 bt7.attachPush(encender8);
  pinMode(6,OUTPUT);

   Serial.begin(9600);
 
  rtc.begin(); //SDA conectado a pin A4 y SCL a A5

 rtc.setTime(56,00,17,12,4,20); //Fecha inicial, dejar como comentario despues de programar por primera vez.

    byte buffer[2];
  
  // Leemos los registros de temperatura
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0x11); // La direccion de los registros de temperatura
  Wire.endTransmission();
  
  // Leemos 2 registros que son los unicos de temperatura
  Wire.requestFrom(DS3231_I2C_ADDRESS, 2); 
  
  // Leemos de a un byte a la vez
  buffer[0] = Wire.read();
  buffer[1] = Wire.read();

  // Mostramos la temperatura con DS3231 por el Monitor Serial
  if (buffer[0] < 0xFF) {  // Para evitar una falsa lectura que usualmente viene en 0xFF = -127C lo que es imposible
    
  //Quitar omentario para motrar temperatura lcd.print(String("") + (buffer[0]-2) + "." + (buffer[1]/64*25) + "C"); //Mostramos la temperatura Con una correccion de -2 grados, Se puede cambiar o quitarpara ajustar sonda temperatura
  }    

  // Leeremos la temperatura cada 1 segundo
  delay(1000);  

}
 
void loop() {


  char Clock[10];
rtc_time_text().toCharArray(Clock,10);


reloj.setText(Clock);
Serial.write( 0xFF);
Serial.write( 0xFF);
Serial.write( 0xFF);

   //Serial.print(Clock); // Mostramos hora 
 delay(1000);    
    
 // Serial.print(rtc_date_text()); ///mostramos fecha
 // delay(1000);
  nexLoop(nex_listen_list);
}
[\code]

Primero va el campo con el valor que se va a modificar, por ejemplo el campo t0 quieres modificarle el texto que seria el valor txt

t0.txt=08:00:05 0xff 0xff 0xff