Попытка создать экземпляр часов реального времени 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("");
} 

, 👍-1

Обсуждение

Определить "взрывается"...?, @Majenko

Если все, что вы хотите сделать, это улучшить то, что может сделать существующая библиотека DS3231, я предлагаю вам просто расширить класс (создать свой собственный класс, который наследует существующий класс) и добавить в него свои собственные функции., @Majenko

Кроме того, вы должны будете предоставить ссылку на библиотеку DS3231, которую вы используете. Я нашел по крайней мере 3, и ни один из них не кажется тем, который вы используете (судя по конструкторам)., @Majenko

Библиотека: http://www.rinkydinkelectronics.com/library.php?id=73, @johnbryanpeters

"взрывы" означает, что никакие последующие операторы не выполняются после первого вызова _realTimeClock->getDateStr()., @johnbryanpeters


1 ответ


0

Похоже, вы предоставляете указатель на конструктор, а не на объект. Либо создайте новый объект с помощью 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