Initial Commit.
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
#ifndef SCENEANALOGCLOCK_H_
|
||||
#define SCENEANALOGCLOCK_H_
|
||||
|
||||
#include <nodemanager_config.h>
|
||||
#include <MySensors.h>
|
||||
#include <NodeManager.h>
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
#include "NotificationLEDs.h"
|
||||
|
||||
|
||||
template<
|
||||
uint8_t _tpin,
|
||||
uint8_t _trgbwId,
|
||||
uint8_t _tdimmerId,
|
||||
uint8_t _tpowerSwitchId,
|
||||
uint8_t _tcommandId,
|
||||
uint16_t _tpixelCount,
|
||||
unsigned long _msgSendInterval
|
||||
> void NotificationLEDs<_tpin, _trgbwId, _tdimmerId, _tpowerSwitchId, _tcommandId, _tpixelCount, _msgSendInterval>
|
||||
::analogClock_config() noexcept {
|
||||
auto token = strtok(NULL, _configDelims);
|
||||
if (token && token[0] != ' ') {
|
||||
auto offset = atoi(token);
|
||||
sceneData.analogClock.hourOffset = offset;
|
||||
}
|
||||
token = strtok(NULL, _configDelims);
|
||||
if (token && token[0] != ' ') {
|
||||
bool innerClock = atoi(token);
|
||||
sceneData.analogClock.showInnerClock = innerClock;
|
||||
}
|
||||
sceneData.analogClock.temporaryDisableInnerClock = false;
|
||||
sceneData.analogClock.lastUnixTime = 0;
|
||||
}
|
||||
|
||||
|
||||
template<
|
||||
uint8_t _tpin,
|
||||
uint8_t _trgbwId,
|
||||
uint8_t _tdimmerId,
|
||||
uint8_t _tpowerSwitchId,
|
||||
uint8_t _tcommandId,
|
||||
uint16_t _tpixelCount,
|
||||
unsigned long _msgSendInterval
|
||||
> void NotificationLEDs<_tpin, _trgbwId, _tdimmerId, _tpowerSwitchId, _tcommandId, _tpixelCount, _msgSendInterval>
|
||||
::analogClock_init() noexcept {
|
||||
for (uint8_t i = 0; i < 12; i++) {
|
||||
pixels.setPixelColor(i, 0);
|
||||
}
|
||||
if (sceneData.analogClock.showInnerClock && !sceneData.analogClock.temporaryDisableInnerClock) {
|
||||
for (uint8_t i = 12; i < 16; i++) {
|
||||
pixels.setPixelColor(i, 0);
|
||||
}
|
||||
}
|
||||
pixels.show();
|
||||
sceneData.analogClock.lastUnixTime = 0;
|
||||
}
|
||||
|
||||
|
||||
template<
|
||||
uint8_t _tpin,
|
||||
uint8_t _trgbwId,
|
||||
uint8_t _tdimmerId,
|
||||
uint8_t _tpowerSwitchId,
|
||||
uint8_t _tcommandId,
|
||||
uint16_t _tpixelCount,
|
||||
unsigned long _msgSendInterval
|
||||
> void NotificationLEDs<_tpin, _trgbwId, _tdimmerId, _tpowerSwitchId, _tcommandId, _tpixelCount, _msgSendInterval>
|
||||
::analogClock_loop(unsigned long currentUnixTime, unsigned long) noexcept {
|
||||
if (sceneData.analogClock.lastUnixTime != currentUnixTime) {
|
||||
auto seconds = currentUnixTime % 60;
|
||||
auto _tmp = currentUnixTime / 60;
|
||||
auto minutes = _tmp % 60;
|
||||
auto hours = (_tmp / 60 + sceneData.analogClock.hourOffset) % 12;
|
||||
auto p_h = (11 - hours) % 12;
|
||||
auto p_m = (11 - minutes/5) % 12;
|
||||
auto p_m2 = minutes % 5;
|
||||
auto p_s = (11 - seconds/5) % 12;
|
||||
auto p_s2 = seconds % 5;
|
||||
/*Serial.print("Time: ");
|
||||
Serial.print(hours);
|
||||
Serial.print(":");
|
||||
Serial.print(minutes);
|
||||
Serial.print(":");
|
||||
Serial.println(seconds);
|
||||
Serial.print("Pixels: ");
|
||||
Serial.print(p_h);
|
||||
Serial.print(":");
|
||||
Serial.print(p_m);
|
||||
Serial.print(":");
|
||||
Serial.println(p_s);*/
|
||||
for (uint8_t i = 0; i < 12; i++) {
|
||||
uint32_t c = 0;
|
||||
if (i == p_h) { // hour => red
|
||||
c |= ((uint32_t)255*(uint32_t)brightness/(uint32_t)100) << 16;
|
||||
}
|
||||
if (i == p_m) { // min => green
|
||||
c |= ((uint32_t)255*(uint32_t)brightness/(uint32_t)100) << 8;
|
||||
}
|
||||
if (i == p_s) { // sec => blue
|
||||
c |= (uint32_t)255*(uint32_t)brightness/(uint32_t)100;
|
||||
}
|
||||
if (c == 0) {
|
||||
c = ((uint32_t)20*(uint32_t)brightness/(uint32_t)100) << 24;
|
||||
}
|
||||
pixels.setPixelColor(i, c);
|
||||
}
|
||||
if (sceneData.analogClock.showInnerClock && !sceneData.analogClock.temporaryDisableInnerClock) {
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
uint32_t c = 0;
|
||||
if (i < p_s2) {
|
||||
c |= (uint32_t)255*(uint32_t)brightness/(uint32_t)100;
|
||||
}
|
||||
if (i < p_m2) {
|
||||
c |= ((uint32_t)255*(uint32_t)brightness/(uint32_t)100) << 8;
|
||||
}
|
||||
pixels.setPixelColor(15 - i, c);
|
||||
}
|
||||
}
|
||||
pixels.show();
|
||||
sceneData.analogClock.lastUnixTime = currentUnixTime;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif /* SCENEANALOGCLOCK_H_ */
|
||||
Reference in New Issue
Block a user