feeder/microDS3231.h

82 lines
4.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Лёгкая библиотека для работы с RTC DS3231 для Arduino
Документация:
GitHub: https://github.com/GyverLibs/microDS3231
Возможности:
- Чтение и запись времени
- Вывод в char* и String
- Чтение температуры датчика
Egor 'Nich1con' Zakharov & AlexGyver, alex@alexgyver.ru
https://alexgyver.ru/
MIT License
Версии:
v1.2 - добавлены ограничения на вводимые в setTime числа. Также нельзя ввести 29 февраля увы =)
v1.3 - пофикшено зависание, когда модуль отключен но опрашивается
v1.4 - незначительный фикс
v2.0 - новые возможности, оптимизация и облегчение
v2.1 - добавил вывод температуры, вывод в String и char
v2.2 - исправлены дни недели (пн-вс 1-7)
v2.3 - небольшие исправления, оптимизация, изменён порядок вывода даты
v2.4 - исправлена установка времени компиляции
v2.5 - добавлен begin для проверки наличия модуля на линии
v2.6 - исправлены отрицательные температуры
*/
#ifndef microDS3231_h
#define microDS3231_h
//#include <microWire.h> // выбор между библиотеками Wire и microWire
#include <Wire.h>
#include "buildTime.h"
#include <Arduino.h>
#define COMPILE_TIME F(__TIMESTAMP__)
struct DateTime {
uint8_t second;
uint8_t minute;
uint8_t hour;
uint8_t day;
uint8_t date;
uint8_t month;
uint16_t year;
};
class MicroDS3231 {
public:
MicroDS3231(uint8_t addr = 0x68); // конструктор. Можно передать адрес
bool begin(void); // инициализация, вернет true, если RTC найден
void setTime(const __FlashStringHelper* stamp); // установка времени == времени компиляции
void setTime(DateTime time); // установить из структуры DateTime
void setTime(int8_t seconds, int8_t minutes, int8_t hours, int8_t date, int8_t month, int16_t year); // установка времени
void setHMSDMY(int8_t hours, int8_t minutes, int8_t seconds, int8_t date, int8_t month, int16_t year); // установка времени тип 2
DateTime getTime(void); // получить в структуру DateTime
uint8_t getSeconds(void); // получить секунды
uint8_t getMinutes(void); // получить минуты
uint8_t getHours(void); // получить часы
uint8_t getDay(void); // получить день недели
uint8_t getDate(void); // получить число
uint16_t getYear(void); // получить год
uint8_t getMonth(void); // получить месяц
String getTimeString(); // получить время как строку вида HH:MM:SS
String getDateString(); // получить дату как строку вида DD.MM.YYYY
void getTimeChar(char* array); // получить время как char array [8] вида HH:MM:SS
void getDateChar(char* array); // получить дату как char array [10] вида DD.MM.YYYY
bool lostPower(void); // проверка на сброс питания
float getTemperatureFloat(void);// получить температуру float
int getTemperature(void); // получить температуру int
private:
uint8_t encodeRegister(int8_t data);
int getTemperatureRaw(void);
uint8_t readRegister(uint8_t addr);
uint8_t unpackRegister(uint8_t data);
uint8_t unpackHours(uint8_t data);
const uint8_t _addr;
};
#endif