Estoy aprendiendo a modulizar mi proyecto, y para ello creo objetos para reutilizar donde lo requiera.
Pero tengo uno que provoca un error que no localizo por más que he buscado.
Código reloj.h
// Librería del reloj
#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <RTClib.h>
class relojRTC{
private:
int _hora;
int _minutos;
DateTime now;
RTC_DS3231 rtc;
// metodos privados
void guardaHora(); // Guardar fecha y hora en RTC.
public:
relojRTC();
void fechaLee(); // Lee fecha a var now desde RTC
void horaInc(); // incrementa 1 hora y guardaHora
void horaDec();
void minutosInc();
void minutosDec();
// retornos
int hora(); // Para control de alarma, retorna la hora.
int minutos(); // Para control de alarma, retorna los minutos
char[11] fecha(); // Retorna la fecha en formato DD/MM/AAAA
char[9] horaStr(boolean segundos = false); // Retorna hora en formato HH:MM si segundos es true: HH:MM:SS
char[15] diaSemanaStr(); // Retorna dia de la semana en texto
}
No tengo claro si está bien construido el objeto.
En la útima linea da el error:
expected unqualified-id before '[' token
Si quito la última da en la siguiente y si quito todos los métodos que devuelven char[x]
da al principio como
class relojRTC{
new types may not be defined in a return type
Hola,
No puedes hacer un tipo de retorno char[11], en lugar de eso debes retornar el puntero al array con
char* fecha();
Te aconsejo que leas algún tutorial sobre punteros en C. Hay algunas peculiaridades de los punteros a char que forman una cadena, la función fecha debe alojar el array y terminarlo con cero. O puedes pasarle el puntero al array que debe rellenar la función como parámetro.
Si no quieres complicarte la vida es mejor que uses String para tratar cadenas en Arduino, aunque usa más memoria, es más sencillo.
En ejemplo tienes una función que retorna una fecha por copia usando String.
// Librería del reloj
#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include <RTClib.h>
class relojRTC{
public:
String fecha(){
String sFecha;
int dia = random(1,32);
String f = String("2021-01-");
if(dia<10)
f += '0';
f += String(dia);
return f;
}
};
relojRTC reloj;
void setup(){
Serial.begin(9600);
String fecha = reloj.fecha();
Serial.println("Fecha:" + fecha);
}
void loop(){
}
Completamente de acuerdo, si quieres comenzar con objetos, empezar además con punteros es complicado, yo comenzaría por objetos simples que hagan cosas muy muy simples sin retornar nada, luego modifica el objeto y devuelve un binario (un número, un int por ejemplo) y luego cuando te sientas cómodo, pasas a los strings o los char.
PD: un puntero o un objeto es una herramienta, no un objetivo, salvo que quieras aprender a programar, en cuyo caso es un objetivo de aprendizaje, entonces primero aprende y luego usa, no queda de otra, es el camino que todos hemos andado antes.