MycilaJSY
13.0.0
Arduino / ESP32 library for the JSY1031, JSY-MK-163, JSY-MK-193, JSY-MK-194, JSY-MK-227, JSY-MK-229, JSY-MK-333 families single-phase and three-phase AC bidirectional meters from Shenzhen Jiansiyan Technologies Co, Ltd.
Loading...
Searching...
No Matches
src
MycilaDimmerCycleStealing.h
1
// SPDX-License-Identifier: MIT
2
/*
3
* Copyright (C) 2023-2025 Mathieu Carbou
4
*/
5
#pragma once
6
7
#include "MycilaDimmer.h"
8
#include <driver/gptimer_types.h>
9
10
namespace
Mycila {
11
class
CycleStealingDimmer
:
public
Dimmer
{
12
public
:
13
virtual
~CycleStealingDimmer
() {
end
(); }
14
18
void
setPin
(gpio_num_t pin) { _pin = pin; }
19
23
gpio_num_t
getPin
()
const
{
return
_pin; }
24
28
void
setSemiPeriod
(uint16_t semiPeriod) {
29
if
(semiPeriod == 0) {
30
ESP_LOGE(
"CycleStealing"
,
"setSemiPeriod: semiPeriod must be > 0"
);
31
}
32
assert(semiPeriod > 0);
33
_semiPeriod = semiPeriod;
34
}
35
39
uint16_t
getSemiPeriod
()
const
{
return
_semiPeriod; }
40
46
void
begin
()
override
;
47
53
void
end
()
override
;
54
55
const
char
* type()
const override
{
return
"cycle-stealing"
; }
56
57
bool
calculateMetrics(Metrics& metrics,
float
gridVoltage,
float
loadResistance)
const override
{
58
// return isEnabled() && _calculatePhaseControlMetrics(metrics, _dutyCycleFire, gridVoltage, loadResistance);
59
return
isEnabled
();
60
}
61
80
static
void
onZeroCross
(int16_t delayUntilZero,
void
* args);
81
82
#ifdef MYCILA_JSON_SUPPORT
88
void
toJson(
const
JsonObject& root)
const override
{
89
Dimmer::toJson(root);
90
root[
"dimmer_pin"
] = _pin;
91
root[
"dimmer_semi_period"
] = _semiPeriod;
92
}
93
#endif
94
95
protected
:
96
bool
_apply()
override
;
97
98
bool
_calculateHarmonics(
float
* array,
size_t
n)
const override
{
99
for
(
size_t
i = 0; i < n; i++) {
100
array[i] = 0.0f;
101
}
102
return
true
;
103
}
104
105
private
:
106
gpio_num_t _pin = GPIO_NUM_NC;
107
bool
_running =
false
;
108
109
static
bool
_fireTimerISR(gptimer_handle_t timer,
const
gptimer_alarm_event_data_t* event,
void
* arg);
110
static
void
_registerDimmer(Mycila::CycleStealingDimmer* dimmer);
111
static
void
_unregisterDimmer(Mycila::CycleStealingDimmer* dimmer);
112
};
113
}
// namespace Mycila
Mycila::CycleStealingDimmer
Definition
MycilaDimmerCycleStealing.h:11
Mycila::CycleStealingDimmer::begin
void begin() override
Enable a dimmer on a specific GPIO pin.
Definition
MycilaDimmerCycleStealing.cpp:50
Mycila::CycleStealingDimmer::end
void end() override
Disable the dimmer.
Definition
MycilaDimmerCycleStealing.cpp:70
Mycila::CycleStealingDimmer::onZeroCross
static void onZeroCross(int16_t delayUntilZero, void *args)
Definition
MycilaDimmerCycleStealing.cpp:110
Mycila::CycleStealingDimmer::setPin
void setPin(gpio_num_t pin)
Set the GPIO pin to use for the dimmer.
Definition
MycilaDimmerCycleStealing.h:18
Mycila::CycleStealingDimmer::getSemiPeriod
uint16_t getSemiPeriod() const
Get the semi-period of the grid frequency in us.
Definition
MycilaDimmerCycleStealing.h:39
Mycila::CycleStealingDimmer::setSemiPeriod
void setSemiPeriod(uint16_t semiPeriod)
Set the semi-period of the grid frequency in us. It cannot be zero and it is required for proper dimm...
Definition
MycilaDimmerCycleStealing.h:28
Mycila::CycleStealingDimmer::getPin
gpio_num_t getPin() const
Get the GPIO pin used for the dimmer.
Definition
MycilaDimmerCycleStealing.h:23
Mycila::Dimmer
Definition
MycilaDimmer.h:22
Mycila::Dimmer::isEnabled
bool isEnabled() const
Check if the dimmer is enabled (if it was able to initialize correctly).
Definition
MycilaDimmer.h:145
Generated by
1.15.0