Hola amigos, pues he tenido un par de problemas a la hora de realizar una conexion entre Xbees y lo he publicado en este foro, bueno en el foro de ingles, seccion guia de proyectos, y pues bueno, he topado con personas increibles que me han ayudado.
Asi que, este codigo logra enviar por medio de TransmitRequest , los xbee en API modo 1, la hora y la fecha obtenidos directamente de un RTC DS1307. Hasta aqui todo bien.
Quiero hacerle unas actualizaciones, quiero que cuando yo corra el programa, este se espera hasta recibir una señal del xbee ubicado en la computadora, un TX sencillo, no tiene que llevar data, lo unico que quiero esque el Xbee del arduino y el arduino comiencen a enviar la hora y la fecha una vez que hayan recibid esta señal. Por decirlo de una manera sencilla, hasta que la PC indique que trabajen, ellos comienzan a trabajar.
El problema: bueno he querido utilizar un poco la libreria de andrewrapp pero como que no me ha solucionado del todo, y queria saber si alguien de aqui puede ayudarme.
#include <SafeString.h>
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <SoftwareSerial.h>
SoftwareSerial xbee(2, 3); //(Rx, TX)
byte packet1[] = {0x7E, 0x00, 0x21}; //Byte delimitador y Longitud de trama
byte packet2[] = {0x10, 0x01, 0x00, 0x13, 0xA2, 0x00, 0x41, 0x4E, 0xF1, 0x24, 0xFF, 0xFE, 0x00, 0x00,}; //Id de trama, tipo de trama, direccion de 64bits, opciones y numero de brincos.
// 00:11:46 05/01/2021 == 19 chars
byte fullPacket[3 + 14 + 19 + 1];// (Delimitador + longitud )+ (tipo + direccion) + fecha + checksum = 37
//
char buffer [25]; // 19 la fecha +1 '\0', 25 bytes de tamaño
#define DEBUG SafeString::Output
void setup() {
Serial.begin(9600);
xbee.begin(9600);
delay(2000);
Serial.println();
Serial.println("DS1307RTC convertir valores a HEX");
Serial.println("-------------------");
SafeString::setOutput(Serial);
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
sprintf(buffer, "%02d:%02d:%02d %02d/%02d/%04d", tm.Hour , tm.Minute, tm.Second, tm.Day, tm.Month, tmYearToCalendar(tm.Year));
//sprintf(buffer, "%02d:%02d:%02d %02d/%02d/%04d", 5 , 6, 7, 8, 9, 2021);
Serial.println(buffer); // con este print compruebo que la fecha y hora
// build fullpacket
size_t idx = 0;
memmove(fullPacket + idx, packet1, sizeof(packet1));
idx += sizeof(packet1);
memmove(fullPacket + idx, packet2, sizeof(packet2));
idx += sizeof(packet2);
if ((idx + 19 + 1) > sizeof(fullPacket)) {
// Si el tamaño es incorrecto
Serial.println(F("fullPacket size wrong"));
}
memmove(fullPacket + idx, buffer, 19);
idx += 19;
// dejar un byte para el cheksum
if ((idx + 1) != sizeof(fullPacket)) {
// fullPacket size wrong
Serial.println(F("fullPacket size wrong"));
}
int chksum = 0;
for (size_t i = 3; i < idx; i++) { // comienza despues del tamaño dela trama
chksum += fullPacket[i]; // comienza a sumar
}
chksum = (0xff & chksum);
chksum = (0xff) & (0xff - chksum);
fullPacket[idx] = chksum;
idx++; // El tamao total de la trama
if (idx != sizeof(fullPacket)) {
Serial.println(F("fullPacket size error"));
}
// Imprime el paquete
size_t printSize = idx * 3; // ..<space>
cSF(sfPacket, printSize);
for (size_t i = 0; i < idx; i++) {
//sfPacket += "0x";
if (fullPacket[i] < 16) {
sfPacket += '0';
}
sfPacket.print(fullPacket[i], HEX);
sfPacket.print(' ');
}
Serial.println(sfPacket);
xbee.write (fullPacket , idx);
delay(10000);
}
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}