Управление яркостью переведено на родной 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(); 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_VERH_PIN, dvizhHandler, DVIZH_TRIGGER);
attachInterrupt(DVIZH_NIZ_PIN, dvizhHandler, DVIZH_TRIGGER); attachInterrupt(DVIZH_NIZ_PIN, dvizhHandler, DVIZH_TRIGGER);
} }

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

@ -6,15 +6,16 @@ void PlavnoVyklyuchit();
bool Vklyucheno(); bool Vklyucheno();
void Vklyuchit(); void Vklyuchit();
void Vyklyuchit(); void Vyklyuchit();
void Yarkost(int i); void initLED();
void Yarkost(unsigned long i);
void Enable(); void Enable();
void Disable(); void Disable();
void TaskSveta(); void TaskSveta();
void PropustitRaz(); 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() { 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; Vyklyuchit(); yarkost=MIN_YARKOST; kogdaVyklyuchit=0; initLED(); Vyklyuchit();
} }
void DvizhEst() { void DvizhEst() {
kogdaVyklyuchit=millis()+VREMYA_SVETA; if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit(); kogdaVyklyuchit=millis()+VREMYA_SVETA; if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit();
@ -37,8 +38,11 @@ void Vklyuchit() {
void Vyklyuchit() { void Vyklyuchit() {
Yarkost(MIN_YARKOST); Disable(); Yarkost(MIN_YARKOST); Disable();
} }
void Yarkost(int i) { void initLED() {
analogWrite(SVET_YARK_PIN,255-i); 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() { void Enable() {
digitalWrite(SVET_ONOFF_PIN,1); digitalWrite(SVET_ONOFF_PIN,1);

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

@ -8,30 +8,32 @@ import (
"my/go-controller/timer" "my/go-controller/timer"
) )
// 150 - примерно то же, что и 255 (должно быть те 1.25В где-то там же) const MAX_YARKOST uint32 = 1000
// 100 - средненько const MIN_YARKOST uint32 = 500
// 50 - приглушённо
const MAX_YARKOST int = 25
const MIN_YARKOST int = 15
const VREMYA_VKL int = 2000 const VREMYA_VKL int = 2000
const VREMYA_SVETA uint32 = 10000 const VREMYA_SVETA uint32 = 10000
const VREMYA_VYKL int = 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 loopBlockTime task.TickType = task.MS_TO_TICKS(1000)
var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(VREMYA_VYKL / DIFF_YARKOST) var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(VREMYA_VYKL / DIFF_YARKOST)
var yarkost int var yarkost uint32
var kogdaVyklyuchit uint32 var kogdaVyklyuchit uint32
func initSvet() { func initSvet() {
yarkost = MIN_YARKOST yarkost = MIN_YARKOST
kogdaVyklyuchit = 0 kogdaVyklyuchit = 0
initLED()
Vyklyuchit() Vyklyuchit()
} }
@ -99,9 +101,14 @@ func Vyklyuchit() {
Disable() 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() { func Enable() {
digital.Write(SVET_ONOFF_PIN, 1) digital.Write(SVET_ONOFF_PIN, 1)