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
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>
14extern 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
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
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}
bool setDutyCycle(float dutyCycle)
Set the power duty.
virtual void begin()
Enable a dimmer on a specific GPIO pin.
virtual void end()
Disable the dimmer.