Яркость: заданы приемлемые рамки яркости и времени вкл/выкл

Этот коммит содержится в:
Softonik 2022-11-22 23:58:56 +03:00 коммит произвёл Nikolay Kopitonenko
родитель a5b21a7697
коммит 8f8f42990d
2 изменённых файлов: 33 добавлений и 19 удалений

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

@ -10,25 +10,26 @@ void Yarkost(int i);
void Enable(); void Enable();
void Disable(); void Disable();
void TaskSveta(); void TaskSveta();
void PropustitRaz();
const int MAX_YARKOST = 100; const int MIN_YARKOST = 0; const unsigned long VREMYA_SVETA = 20000; TickType_t loopBlockTime = pdMS_TO_TICKS(1000); int vklYarkBlockTime = 10; TickType_t vyklYarkBlockTime = pdMS_TO_TICKS(50); int yarkost; unsigned long kogdaVyklyuchit; void initSvet() { 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=0; kogdaVyklyuchit=0; Vyklyuchit(); yarkost=MIN_YARKOST; kogdaVyklyuchit=0; Vyklyuchit();
} }
void DvizhEst() { void DvizhEst() {
kogdaVyklyuchit=millis()+VREMYA_SVETA; if (!Vklyucheno()) { if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit(); } kogdaVyklyuchit=millis()+VREMYA_SVETA; if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit();
} }
void DvizhaNet() { void DvizhaNet() {
if (kogdaVyklyuchit>millis()) { return; } if (Vklyucheno()) { if (DEBUG) { Serial.println("Vykl"); } PlavnoVyklyuchit(); } if (kogdaVyklyuchit>millis()) { return; } if (Vklyucheno()) { if (DEBUG) { Serial.println("Vykl"); } PlavnoVyklyuchit(); }
} }
void PlavnoVklyuchit() { void PlavnoVklyuchit() {
Enable(); for(yarkost=yarkost; yarkost<=MAX_YARKOST; yarkost++) {Yarkost(yarkost); if (DEBUG) { Serial.println(yarkost); } delay(vklYarkBlockTime);} Vklyuchit(); Enable(); for(yarkost=yarkost; yarkost<=MAX_YARKOST; yarkost++) {Yarkost(yarkost); if (DEBUG) { Serial.println(yarkost); } delay(VREMYA_VKL/DIFF_YARKOST);} Vklyuchit();
} }
void PlavnoVyklyuchit() { void PlavnoVyklyuchit() {
int v; for(yarkost=yarkost; yarkost>=MIN_YARKOST; yarkost--) {Yarkost(yarkost); if (DEBUG) { Serial.println(yarkost); } v=ulTaskNotifyTake(0,vyklYarkBlockTime); if (v>0) { DvizhEst(); return; }} Vyklyuchit(); int v; for(yarkost=yarkost; yarkost>=MIN_YARKOST; yarkost--) {Yarkost(yarkost); if (DEBUG) { Serial.println(yarkost); } v=ulTaskNotifyTake(0,vyklYarkBlockTime); if (v>0) { DvizhEst(); return; }} Vyklyuchit();
} }
bool Vklyucheno() { bool Vklyucheno() {
return yarkost>0; return yarkost>MIN_YARKOST;
} }
void Vklyuchit() { void Vklyuchit() {
Yarkost(MAX_YARKOST); Enable(); Yarkost(MAX_YARKOST); Enable();
@ -46,5 +47,8 @@ void Disable() {
digitalWrite(SVET_ONOFF_PIN,0); digitalWrite(SVET_ONOFF_PIN,0);
} }
void TaskSveta() { void TaskSveta() {
int v; while(1) {v=ulTaskNotifyTake(0,loopBlockTime); if (v>0) { DvizhEst(); } else { DvizhaNet(); }} int v; PropustitRaz(); while(1) {v=ulTaskNotifyTake(0,loopBlockTime); if (v>0) { DvizhEst(); } else { DvizhaNet(); }}
}
void PropustitRaz() {
ulTaskNotifyTake(0,loopBlockTime);
} }

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

@ -10,21 +10,26 @@ import (
// 150 - примерно то же, что и 255 (должно быть те 1.25В где-то там же) // 150 - примерно то же, что и 255 (должно быть те 1.25В где-то там же)
// 100 - средненько // 100 - средненько
// 50 - приглушённо
const MAX_YARKOST int = 100 const MAX_YARKOST int = 25
const MIN_YARKOST int = 0 const MIN_YARKOST int = 15
const VREMYA_SVETA uint32 = 20000 const VREMYA_VKL int = 2000
const VREMYA_SVETA uint32 = 10000
const VREMYA_VYKL int = 10000
const DIFF_YARKOST int = MAX_YARKOST - MIN_YARKOST
var loopBlockTime task.TickType = task.MS_TO_TICKS(1000) var loopBlockTime task.TickType = task.MS_TO_TICKS(1000)
var vklYarkBlockTime int = 10
var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(50) var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(VREMYA_VYKL / DIFF_YARKOST)
var yarkost int var yarkost int
var kogdaVyklyuchit uint32 var kogdaVyklyuchit uint32
func initSvet() { func initSvet() {
yarkost = 0 yarkost = MIN_YARKOST
kogdaVyklyuchit = 0 kogdaVyklyuchit = 0
Vyklyuchit() Vyklyuchit()
@ -33,13 +38,11 @@ func initSvet() {
func DvizhEst() { func DvizhEst() {
kogdaVyklyuchit = timer.Millis() + VREMYA_SVETA kogdaVyklyuchit = timer.Millis() + VREMYA_SVETA
if !Vklyucheno() {
if DEBUG { if DEBUG {
serial.Println("Vkl svet") serial.Println("Vkl svet")
} }
PlavnoVklyuchit() PlavnoVklyuchit()
} }
}
func DvizhaNet() { func DvizhaNet() {
if kogdaVyklyuchit > timer.Millis() { if kogdaVyklyuchit > timer.Millis() {
return return
@ -61,7 +64,7 @@ func PlavnoVklyuchit() {
if DEBUG { if DEBUG {
serial.Println(yarkost) serial.Println(yarkost)
} }
timer.Delay(vklYarkBlockTime) timer.Delay(VREMYA_VKL / DIFF_YARKOST)
} }
Vklyuchit() Vklyuchit()
@ -80,11 +83,12 @@ func PlavnoVyklyuchit() {
return return
} }
} }
Vyklyuchit() Vyklyuchit()
} }
func Vklyucheno() bool { func Vklyucheno() bool {
return yarkost > 0 return yarkost > MIN_YARKOST
} }
func Vklyuchit() { func Vklyuchit() {
Yarkost(MAX_YARKOST) Yarkost(MAX_YARKOST)
@ -109,6 +113,8 @@ func Disable() {
func TaskSveta() { func TaskSveta() {
var v int var v int
PropustitRaz()
for { for {
/* Block to wait for a notification. Here the RTOS /* Block to wait for a notification. Here the RTOS
task notification is being used as a counting semaphore. task notification is being used as a counting semaphore.
@ -127,3 +133,7 @@ func TaskSveta() {
} }
} }
} }
func PropustitRaz() {
task.TaskNotifyTake(0, loopBlockTime)
}