SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
custom_callback.ino
Go to the documentation of this file.
1
30#include <Wire.h>
31#include <SPI.h>
32#include <Arduino.h>
33#include "SensorPCF8563.hpp"
34
35#ifndef SENSOR_SDA
36#define SENSOR_SDA 21
37#endif
38
39#ifndef SENSOR_SCL
40#define SENSOR_SCL 22
41#endif
42
44
45uint32_t intervalue;
46char buf[64];
47
48bool i2c_wr_function(uint8_t addr, uint8_t reg, uint8_t *buf, size_t len, bool writeReg, bool isWrite)
49{
50 if (isWrite) {
51 Wire.beginTransmission(addr);
52 if (writeReg) {
53 Wire.write(reg);
54 }
55 if (buf && len > 0) {
56 Wire.write(buf, len);
57 }
58 return (Wire.endTransmission() == 0);
59
60 } else {
61 if (writeReg) {
62 Wire.beginTransmission(addr);
63 Wire.write(reg);
64 Wire.endTransmission();
65 }
66 Wire.requestFrom(addr, static_cast<uint8_t>(len));
67 for (size_t i = 0; i < len; ++i) {
68 if (Wire.available()) {
69 buf[i] = Wire.read();
70 } else {
71 return false;
72 }
73 }
74 return true;
75 }
76}
77
78
79uint32_t hal_callback(SensorCommCustomHal::Operation op, void *param1, void *param2)
80{
81 switch (op) {
83 uint8_t pin = reinterpret_cast<uintptr_t>(param1);
84 uint8_t mode = reinterpret_cast<uintptr_t>(param2);
85 pinMode(pin, mode);
86 }
87 break;
89 uint8_t pin = reinterpret_cast<uintptr_t>(param1);
90 uint8_t level = reinterpret_cast<uintptr_t>(param2);
91 digitalWrite(pin, level);
92 }
93 break;
95 uint8_t pin = reinterpret_cast<uintptr_t>(param1);
96 return digitalRead(pin);
97 }
98 break;
100 return millis();
101 break;
103 if (param1) {
104 uint32_t ms = reinterpret_cast<uintptr_t>(param1);
105 delay(ms);
106 }
107 }
108 break;
110 uint32_t us = reinterpret_cast<uintptr_t>(param1);
111 delayMicroseconds(us);
112 }
113 break;
114 default:
115 break;
116 }
117 return 0;
118}
119
120void setup()
121{
122 Serial.begin(115200);
123 while (!Serial);
124
125#if (defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_STM32)) && !defined(ARDUINO_ARCH_MBED)
126 Wire.setSCL(SENSOR_SCL);
127 Wire.setSDA(SENSOR_SDA);
128 Wire.begin();
129#elif defined(ARDUINO_ARCH_NRF52)
130 Wire.setPins(SENSOR_SDA, SENSOR_SCL);
131 Wire.begin();
132#elif defined(ARDUINO_ARCH_ESP32)
133 Wire.begin(SENSOR_SDA, SENSOR_SCL);
134#else
135 Wire.begin();
136#endif
137
138 // Using SensorLib with callback functions
139 // Other sensor classes also support the same methods and can be applied to different platforms
140 if (!rtc.begin(i2c_wr_function)) {
141 Serial.println("Failed to find PCF8563 - check your wiring!");
142 while (1) {
143 delay(1000);
144 }
145 }
146
147 // The simplest way to set up
148 rtc.setDateTime(2024, 1, 17, 4, 21, 30);
149
150 // Unix tm structure sets the time
151 struct tm timeinfo;
152 timeinfo.tm_yday = 2025 - 1900; //Counting starts from 1900, so subtract 1900 here
153 timeinfo.tm_mon = 1 - 1; //Months start at 0, so you need to subtract 1.
154 timeinfo.tm_mday = 17;
155 timeinfo.tm_hour = 4;
156 timeinfo.tm_min = 30;
157 timeinfo.tm_sec = 30;
158 rtc.setDateTime(timeinfo);
159
160}
161
162
163void loop()
164{
165 if (millis() - intervalue > 1000) {
166
167 intervalue = millis();
168
169 struct tm timeinfo;
170 // Get the time C library structure
171 rtc.getDateTime(&timeinfo);
172
173 // Format the output using the strftime function
174 // For more formats, please refer to :
175 // https://man7.org/linux/man-pages/man3/strftime.3.html
176
177 size_t written = strftime(buf, 64, "%A, %B %d %Y %H:%M:%S", &timeinfo);
178
179 if (written != 0) {
180 Serial.println(buf);
181 }
182
183 written = strftime(buf, 64, "%b %d %Y %H:%M:%S", &timeinfo);
184 if (written != 0) {
185 Serial.println(buf);
186 }
187
188
189 written = strftime(buf, 64, "%A, %d. %B %Y %I:%M%p", &timeinfo);
190 if (written != 0) {
191 Serial.println(buf);
192 }
193 }
194}
195
196
197
uint8_t level
Driver for the PCF8563 real-time clock (RTC) over I2C.
void setDateTime(RTC_DateTime datetime) override
Set the RTC date/time.
bool begin(SensorCommCustom::CustomCallback callback)
Initialize the device using a user-provided transport callback.
RTC_DateTime getDateTime() override
Get the current RTC date/time.
SensorPCF8563 rtc
char buf[64]
void setup()
#define SENSOR_SCL
#define SENSOR_SDA
uint32_t hal_callback(SensorCommCustomHal::Operation op, void *param1, void *param2)
bool i2c_wr_function(uint8_t addr, uint8_t reg, uint8_t *buf, size_t len, bool writeReg, bool isWrite)
uint32_t intervalue
void loop()
uint8_t i