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
MycilaDimmerBurstFire.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
BurstFireDimmer
:
public
Dimmer
{
12
public
:
13
virtual
~BurstFireDimmer
() {
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(
"MycilaDimmerBurstFire"
,
"setSemiPeriod: semiPeriod must be > 0"
);
31
}
32
assert(semiPeriod > 0);
33
_semiPeriod = semiPeriod;
34
}
35
39
uint16_t
getSemiPeriod
()
const
{
return
_semiPeriod; }
40
46
virtual
void
begin
();
47
53
virtual
void
end
();
54
55
virtual
const
char
* type()
const
{
return
"burst-fire"
; }
56
75
static
void
onZeroCross
(int16_t delayUntilZero,
void
* args);
76
77
#ifdef MYCILA_JSON_SUPPORT
83
void
toJson(
const
JsonObject& root)
const override
{
84
Dimmer::toJson(root);
85
root[
"dimmer_pin"
] = _pin;
86
root[
"dimmer_semi_period"
] = _semiPeriod;
87
}
88
#endif
89
90
protected
:
91
virtual
bool
_apply() {
92
// if (!_online || !_semiPeriod || _dutyCycleFire == 0) {
93
// _delay = UINT16_MAX;
94
// return _enabled;
95
// }
96
// if (_dutyCycleFire == 1) {
97
// _delay = 0;
98
// return _enabled;
99
// }
100
// _delay = (1.0f - _dutyCycleFire) * static_cast<float>(_semiPeriod);
101
return
_enabled;
102
}
103
104
private
:
105
gpio_num_t _pin = GPIO_NUM_NC;
106
107
static
bool
_fireTimerISR(gptimer_handle_t timer,
const
gptimer_alarm_event_data_t* event,
void
* arg);
108
static
void
_registerDimmer(Mycila::BurstFireDimmer* dimmer);
109
static
void
_unregisterDimmer(Mycila::BurstFireDimmer* dimmer);
110
};
111
}
// namespace Mycila
Mycila::BurstFireDimmer
Definition
MycilaDimmerBurstFire.h:11
Mycila::BurstFireDimmer::begin
virtual void begin()
Enable a dimmer on a specific GPIO pin.
Definition
MycilaDimmerBurstFire.cpp:65
Mycila::BurstFireDimmer::onZeroCross
static void onZeroCross(int16_t delayUntilZero, void *args)
Definition
MycilaDimmerBurstFire.cpp:96
Mycila::BurstFireDimmer::setPin
void setPin(gpio_num_t pin)
Set the GPIO pin to use for the dimmer.
Definition
MycilaDimmerBurstFire.h:18
Mycila::BurstFireDimmer::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
MycilaDimmerBurstFire.h:28
Mycila::BurstFireDimmer::end
virtual void end()
Disable the dimmer.
Definition
MycilaDimmerBurstFire.cpp:85
Mycila::BurstFireDimmer::getPin
gpio_num_t getPin() const
Get the GPIO pin used for the dimmer.
Definition
MycilaDimmerBurstFire.h:23
Mycila::BurstFireDimmer::getSemiPeriod
uint16_t getSemiPeriod() const
Get the semi-period of the grid frequency in us.
Definition
MycilaDimmerBurstFire.h:39
Mycila::Dimmer
Definition
MycilaDimmer.h:20
Generated by
1.14.0