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
MycilaDimmerPWM.cpp
1
// SPDX-License-Identifier: MIT
2
/*
3
* Copyright (C) 2023-2025 Mathieu Carbou
4
*/
5
#include <MycilaDimmerPWM.h>
6
7
#include <driver/ledc.h>
8
9
// logging
10
#include <esp32-hal-log.h>
11
12
#ifdef MYCILA_LOGGER_SUPPORT
13
#include <MycilaLogger.h>
14
extern
Mycila::Logger logger;
15
#define LOGD(tag, format, ...) logger.debug(tag, format, ##__VA_ARGS__)
16
#define LOGI(tag, format, ...) logger.info(tag, format, ##__VA_ARGS__)
17
#define LOGW(tag, format, ...) logger.warn(tag, format, ##__VA_ARGS__)
18
#define LOGE(tag, format, ...) logger.error(tag, format, ##__VA_ARGS__)
19
#else
20
#define LOGD(tag, format, ...) ESP_LOGD(tag, format, ##__VA_ARGS__)
21
#define LOGI(tag, format, ...) ESP_LOGI(tag, format, ##__VA_ARGS__)
22
#define LOGW(tag, format, ...) ESP_LOGW(tag, format, ##__VA_ARGS__)
23
#define LOGE(tag, format, ...) ESP_LOGE(tag, format, ##__VA_ARGS__)
24
#endif
25
26
#ifndef GPIO_IS_VALID_OUTPUT_GPIO
27
#define GPIO_IS_VALID_OUTPUT_GPIO(gpio_num) ((gpio_num >= 0) && \
28
(((1ULL << (gpio_num)) & SOC_GPIO_VALID_OUTPUT_GPIO_MASK) != 0))
29
#endif
30
31
#ifndef GPIO_IS_VALID_GPIO
32
#define GPIO_IS_VALID_GPIO(gpio_num) ((gpio_num >= 0) && \
33
(((1ULL << (gpio_num)) & SOC_GPIO_VALID_GPIO_MASK) != 0))
34
#endif
35
36
#define TAG "PWM_DIMMER"
37
38
void
Mycila::PWMDimmer::begin
() {
39
if
(_enabled)
40
return
;
41
42
if
(!GPIO_IS_VALID_OUTPUT_GPIO(_pin)) {
43
LOGE(TAG,
"Disable PWM Dimmer: Invalid pin: %"
PRId8, _pin);
44
return
;
45
}
46
47
LOGI(TAG,
"Enable PWM Dimmer on pin %"
PRId8, _pin);
48
49
pinMode(_pin, OUTPUT);
50
digitalWrite(_pin, LOW);
51
52
if
(ledcAttach(_pin, _frequency, _resolution) && ledcWrite(_pin, 0)) {
53
_enabled =
true
;
54
}
else
{
55
LOGE(TAG,
"Failed to attach ledc driver on pin %"
PRId8, _pin);
56
return
;
57
}
58
59
// restart with last saved value
60
setDutyCycle
(_dutyCycle);
61
}
62
63
void
Mycila::PWMDimmer::end
() {
64
if
(!_enabled)
65
return
;
66
_enabled =
false
;
67
_online =
false
;
68
LOGI(TAG,
"Disable PWM Dimmer on pin %"
PRId8, _pin);
69
_apply();
70
ledcDetach(_pin);
71
pinMode(_pin, OUTPUT);
72
digitalWrite(_pin, LOW);
73
}
Mycila::Dimmer::setDutyCycle
bool setDutyCycle(float dutyCycle)
Set the power duty.
Definition
MycilaDimmer.h:188
Mycila::PWMDimmer::begin
virtual void begin()
Enable a dimmer on a specific GPIO pin.
Definition
MycilaDimmerPWM.cpp:38
Mycila::PWMDimmer::end
virtual void end()
Disable the dimmer.
Definition
MycilaDimmerPWM.cpp:63
Generated by
1.14.0