Guardar datos HEX en un array para enviar por Xbee

Hola Arduiforeros buenas tardes, mi intención con este código es obtener los datos de Tiempo y Fecha del RTC DS1307 y enviarlos desde un Xbee en el Arduino, hasta un Xbee en la PC y leerlos por medio del XCTU. Esta es una prueba porque mas adelante quisiera mandar un valor de voltaje junto con el tiempo y la fecha. Tengo un problema a la hora de ver los caracteres en modo HEX porque cuando impormo el array no se muestran los caracteres.

#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <SoftwareSerial.h>

SoftwareSerial xbee(2, 3);
char buffer [20];
char packet2 [40];
char varHex ;

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // Espero al serial
  delay(200);
  Serial.println("DS1307RTC convertir valores a HEX");
  Serial.println("-------------------");
}
void loop() {
  tmElements_t tm;
  if (RTC.read(tm)) {
    //Sprintf Crea una cadena tipo string 
    sprintf(buffer, "%02d:%02d:%02d %02d/%02d/%04d", tm.Hour, tm.Minute, tm.Second, tm.Day, tm.Month, tmYearToCalendar(tm.Year)); 
    Serial.println(buffer); // con este print compruebo que la fecha y hora
    
   //Pasar de ASCII a HEX 
   // Formato ASCII :00:11:46 1/5/2021  
   // Formato HEX : 30 30 3A 31 31 3A 34 36 20 7C 20 31 2F 35 2F 32 30 32 31 0D  
    for (int i=0; i<20; i++){
      varHex = (buffer[i], HEX);
      packet2[i] = varHex;
      Serial.println(buffer[i], HEX); // con este print compruebo que he convertido los caracteres a Hex
    }                                // Quisiera tener estos Hex como como el formato HEX para enviarlos por el serial del Xbe
  Serial.println(packet2); //Pero cuando los imprimo aqui argumentando que inicialice un array, me imprime otra cosa.
  //xbee.write (packet , sizeof(packet));  // Manda el mensaje al nodo PC 
  } 
  delay(10000);
}
  
void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

tengo este resultado.

Hola @ignaciomorac bienvenido al foro Arduino en Español.
Ya has estado por el foro pero por tus pocos post te saludo nuevamente.
tm tiene soluciones para ser impresas como cadenas. porque no las usas?

que tal con algo asi

void formatDateTime(tmElements_t &tm, String &dateTime){
  char res[20];
  sprintf(buffer, "%02d:%02d:%02d %02d/%02d/%04d", tm.Hour, tm.Minute, tm.Second, tm.Day, tm.Month, tmYearToCalendar(tm.Year)); 
  dateTime = res;
}

Entonces un uso como este
Con S

// define como String
String dateTime;

formatDateTime(tm, dateTime);
Serial.println(dateTime); 

Eso debería funcionar. Espero se comprenda lo hice sobre la marcha

1 Like

Hola Surbyte muchas gracias por tomarse el tiempo en contestar, aprecio tu respuesta y lo tomare en cuenta.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.