Попытка создать экземпляр часов реального времени DS3231 в библиотеке
Я пытаюсь написать библиотеку, инкапсулирующую вещи, которые я делаю с часами реального времени DS3231. Мне удалось скомпилировать скетч с помощью библиотеки, но он, по-видимому, взрывается при попытке вызвать методы часов, такие как getTime().
Заголовок:
// JBP_DS3231.h
#ifndef __JBP_DS3231_h__
#define __JBP_DS3231_h__
#include <SD.h>
#include "DS3231.h"
#include "Arduino.h"
class JBP_DS3231
{
public:
JBP_DS3231();
String TimeStamp();
private:
DS3231* _realTimeClock;
};
#endif
cpp:
#include <JBP_DS3231.h>
#include <SD.h>
#include "DS3231.h"
#include "Arduino.h"
JBP_DS3231::JBP_DS3231() {
String thisTime = "";
_realTimeClock = &DS3231(SDA, SCL);
Serial.println("Собираюсь попытаться получить время от RTC."); // Последняя строка, которую мы слышим.
thisTime = _realTimeClock->getTimeStr();
Serial.print("Время в конструкторе равно: ");
Serial.println(thisTime);
}
String JBP_DS3231::TimeStamp() {
String timeStamp = "";
Serial.println("In TimeStamp().");
timeStamp = _realTimeClock->getDateStr(FORMAT_LONG, FORMAT_MIDDLEENDIAN, '/');
Serial.print("Значение временной метки равно: ");
Serial.println(timeStamp);
timeStamp.concat(" ");
timeStamp.concat(_realTimeClock->getTimeStr());
Serial.println(timeStamp);
return timeStamp;
}
Сценарий:
const String WHO_AM_I = "JBP_DS3231_library_test.ino";
const int VERSION = 0;
#include <JBP_DS3231.h>
void setup() {
Serial.begin(9600);
AnnounceAwakening();
JBP_DS3231 johnsRTC;
Serial.println(johnsRTC.TimeStamp());
}
void loop() {
return;
}
void AnnounceAwakening() {
Serial.print("Sketch ");
Serial.print(WHO_AM_I);
Serial.print(" version ");
Serial.print(VERSION);
Serial.println(".");
Serial.println("");
}
@johnbryanpeters, 👍-1
Обсуждение1 ответ
Похоже, вы предоставляете указатель на конструктор, а не на объект. Либо создайте новый объект с помощью new
, либо создайте экземпляр объекта отдельно и укажите указатель на объект:
_realTimeClock = new DS3231(SDA, SCL);
Еще лучше, расширьте существующий класс и реализуйте свои собственные методы:
clsss JBP_DS3231 : public DS3231 {
public:
JBP_DS3231(uint8_t d, uint8_t c) : DS3231(d, c) {
String thisTime = "";
Serial.println("About to try to get time from RTC."); // Последняя строка, с которой мы слышим.
thisTime = getTimeStr();
Serial.print("Time in constructor is: ");
Serial.println(thisTime);
}
String TimeStamp() {
String timeStamp = "";
Serial.println("In TimeStamp().");
timeStamp = getDateStr(FORMAT_LONG, FORMAT_MIDDLEENDIAN, '/');
Serial.print("Value of timestamp is: ");
Serial.println(timeStamp);
timeStamp.concat(" ");
timeStamp.concat(getTimeStr());
Serial.println(timeStamp);
return timeStamp;
}
};
void setup() {
Serial.begin(115200);
JBP_DS3231 myRTC(SDA, SCL);
Serial.println(johnsRTC.TimeStamp());
}
void loop() {
}
(Примечание: непроверено)
Для того, что я делаю, расширение исходного класса кажется логичным. Я попытаюсь и доложу, спасибо., @johnbryanpeters
Майенко, пример, который вы привели, не имеет формы библиотеки. Я попробовал несколько вариантов; это дает мне ошибку: ожидаемое первичное выражение перед символом",". JBP_DS3231.h класс JBP_DS3231 : общедоступный DS3231 { общественный: JBP_DS3231(uint8_t, uint8_t) : DS3231(uint8_t, uint8_t); JBP_DS3231.cpp JBP_DS3231::JBP_DS3231(uint8_t _SDA, uint8_t _SCL) : DS3231(_SDA, _SCL) {, @johnbryanpeters
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Существуют ли библиотеки сглаживания сигналов для Arduino?
- Wire.h не найден!
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
- Ошибка Specified folder/zip file does not contain a valid library
Определить "взрывается"...?, @Majenko
Если все, что вы хотите сделать, это улучшить то, что может сделать существующая библиотека DS3231, я предлагаю вам просто расширить класс (создать свой собственный класс, который наследует существующий класс) и добавить в него свои собственные функции., @Majenko
Кроме того, вы должны будете предоставить ссылку на библиотеку DS3231, которую вы используете. Я нашел по крайней мере 3, и ни один из них не кажется тем, который вы используете (судя по конструкторам)., @Majenko
Библиотека: http://www.rinkydinkelectronics.com/library.php?id=73, @johnbryanpeters
"взрывы" означает, что никакие последующие операторы не выполняются после первого вызова _realTimeClock->getDateStr()., @johnbryanpeters