Управление яркостью переведено на родной ESP32 LED интерфейс: к-во уровней 4096 - красота!

Этот коммит содержится в:
Softonik 2022-11-23 03:12:56 +03:00 коммит произвёл Nikolay Kopitonenko
родитель 8f8f42990d
коммит 0aa4949404
3 изменённых файлов: 27 добавлений и 16 удалений

Просмотреть файл

@ -39,7 +39,7 @@ void setup_dvizh() {
initSvet();
xTaskCreate(TaskInterruptsReceiver, "taskInterruptsReceiver", 4096, NULL, ESP_TASKD_EVENT_PRIO - 1, &taskInterruptsReceiverHandle);
xTaskCreate(TaskInterruptsReceiver, "taskInterruptsReceiver", 4096, NULL, ESP_TASKD_EVENT_PRIO - 3, &taskInterruptsReceiverHandle);
attachInterrupt(DVIZH_VERH_PIN, dvizhHandler, DVIZH_TRIGGER);
attachInterrupt(DVIZH_NIZ_PIN, dvizhHandler, DVIZH_TRIGGER);
}

Просмотреть файл

@ -6,15 +6,16 @@ void PlavnoVyklyuchit();
bool Vklyucheno();
void Vklyuchit();
void Vyklyuchit();
void Yarkost(int i);
void initLED();
void Yarkost(unsigned long i);
void Enable();
void Disable();
void TaskSveta();
void PropustitRaz();
const int MAX_YARKOST = 25; const int MIN_YARKOST = 15; const int VREMYA_VKL = 2000; const unsigned long VREMYA_SVETA = 10000; const int VREMYA_VYKL = 10000; const int DIFF_YARKOST = MAX_YARKOST-MIN_YARKOST; TickType_t loopBlockTime = pdMS_TO_TICKS(1000); TickType_t vyklYarkBlockTime = pdMS_TO_TICKS(VREMYA_VYKL/DIFF_YARKOST); int yarkost; unsigned long kogdaVyklyuchit; void initSvet() {
yarkost=MIN_YARKOST; kogdaVyklyuchit=0; Vyklyuchit();
const unsigned long MAX_YARKOST = 1000; const unsigned long MIN_YARKOST = 500; const int VREMYA_VKL = 2000; const unsigned long VREMYA_SVETA = 10000; const int VREMYA_VYKL = 10000; const byte LEDC_CHANNEL_0 = 0; const int LEDC_RESOLUTION_BITS = 12; const unsigned long MAX_CHANNEL_VALUE = 0xfff-1; const int LEDC_BASE_FREQ = 5000; const int DIFF_YARKOST = int(MAX_YARKOST-MIN_YARKOST); TickType_t loopBlockTime = pdMS_TO_TICKS(1000); TickType_t vyklYarkBlockTime = pdMS_TO_TICKS(VREMYA_VYKL/DIFF_YARKOST); unsigned long yarkost; unsigned long kogdaVyklyuchit; void initSvet() {
yarkost=MIN_YARKOST; kogdaVyklyuchit=0; initLED(); Vyklyuchit();
}
void DvizhEst() {
kogdaVyklyuchit=millis()+VREMYA_SVETA; if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit();
@ -37,8 +38,11 @@ void Vklyuchit() {
void Vyklyuchit() {
Yarkost(MIN_YARKOST); Disable();
}
void Yarkost(int i) {
analogWrite(SVET_YARK_PIN,255-i);
void initLED() {
ledcSetup(LEDC_CHANNEL_0,LEDC_BASE_FREQ,LEDC_RESOLUTION_BITS); ledcAttachPin(SVET_YARK_PIN,LEDC_CHANNEL_0);
}
void Yarkost(unsigned long i) {
ledcWrite(LEDC_CHANNEL_0,MAX_CHANNEL_VALUE-i);
}
void Enable() {
digitalWrite(SVET_ONOFF_PIN,1);

Просмотреть файл

@ -8,30 +8,32 @@ import (
"my/go-controller/timer"
)
// 150 - примерно то же, что и 255 (должно быть те 1.25В где-то там же)
// 100 - средненько
// 50 - приглушённо
const MAX_YARKOST int = 25
const MIN_YARKOST int = 15
const MAX_YARKOST uint32 = 1000
const MIN_YARKOST uint32 = 500
const VREMYA_VKL int = 2000
const VREMYA_SVETA uint32 = 10000
const VREMYA_VYKL int = 10000
const DIFF_YARKOST int = MAX_YARKOST - MIN_YARKOST
const LEDC_CHANNEL_0 byte = 0
const LEDC_RESOLUTION_BITS int = 12
const MAX_CHANNEL_VALUE uint32 = 0xfff - 1
const LEDC_BASE_FREQ int = 5000
const DIFF_YARKOST int = int(MAX_YARKOST - MIN_YARKOST)
var loopBlockTime task.TickType = task.MS_TO_TICKS(1000)
var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(VREMYA_VYKL / DIFF_YARKOST)
var yarkost int
var yarkost uint32
var kogdaVyklyuchit uint32
func initSvet() {
yarkost = MIN_YARKOST
kogdaVyklyuchit = 0
initLED()
Vyklyuchit()
}
@ -99,9 +101,14 @@ func Vyklyuchit() {
Disable()
}
func Yarkost(i int) {
func initLED() {
analog.LEDcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_RESOLUTION_BITS)
analog.LEDcAttachPin(SVET_YARK_PIN, LEDC_CHANNEL_0)
}
func Yarkost(i uint32) {
// логика яркости инвертирована
analog.Write(SVET_YARK_PIN, 255-i)
// analog.Write(SVET_YARK_PIN)
analog.LEDcWrite(LEDC_CHANNEL_0, MAX_CHANNEL_VALUE-i)
}
func Enable() {
digital.Write(SVET_ONOFF_PIN, 1)