Переделка логики яркости и ограничение максимума в 100

Этот коммит содержится в:
Softonik 2022-11-22 02:28:01 +03:00 коммит произвёл Nikolay Kopitonenko
родитель e2ebb77bf0
коммит 222e044bc1
2 изменённых файлов: 68 добавлений и 36 удалений

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

@ -1,34 +1,50 @@
void initSvet(); void initSvet();
void DvizhEst(int start); void DvizhEst();
void DvizhaNet(); void DvizhaNet();
void PlavnoVklyuchit(int start); void PlavnoVklyuchit();
void PlavnoVyklyuchit(); void PlavnoVyklyuchit();
bool Vklyucheno();
void Vklyuchit(); void Vklyuchit();
void Vyklyuchit(); void Vyklyuchit();
void Yarkost(int i);
void Enable();
void Disable();
void TaskSveta(); void TaskSveta();
const unsigned long VREMYA_SVETA = 20000; TickType_t loopBlockTime = pdMS_TO_TICKS(1000); int vklYarkBlockTime = 10; TickType_t vyklYarkBlockTime = pdMS_TO_TICKS(50); bool vkl; unsigned long kogdaVyklyuchit; void initSvet() { 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() {
vkl=false; kogdaVyklyuchit=0; Vyklyuchit(); yarkost=0; kogdaVyklyuchit=0; Vyklyuchit();
} }
void DvizhEst(int start) { void DvizhEst() {
kogdaVyklyuchit=millis()+VREMYA_SVETA; if (!vkl) { vkl=true; if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit(start); } kogdaVyklyuchit=millis()+VREMYA_SVETA; if (!Vklyucheno()) { if (DEBUG) { Serial.println("Vkl svet"); } PlavnoVklyuchit(); }
} }
void DvizhaNet() { void DvizhaNet() {
if (kogdaVyklyuchit>millis()) { return; } if (vkl) { vkl=false; if (DEBUG) { Serial.println("Vykl"); } PlavnoVyklyuchit(); } if (kogdaVyklyuchit>millis()) { return; } if (Vklyucheno()) { if (DEBUG) { Serial.println("Vykl"); } PlavnoVyklyuchit(); }
} }
void PlavnoVklyuchit(int start) { void PlavnoVklyuchit() {
digitalWrite(SVET_ONOFF_PIN,1); int i; for(i=start; i>=0; i--) {analogWrite(SVET_YARK_PIN,i); if (DEBUG) { Serial.println(i); } delay(vklYarkBlockTime);} Vklyuchit(); Enable(); for(yarkost=yarkost; yarkost<=MAX_YARKOST; yarkost++) {Yarkost(yarkost); if (DEBUG) { Serial.println(yarkost); } delay(vklYarkBlockTime);} Vklyuchit();
} }
void PlavnoVyklyuchit() { void PlavnoVyklyuchit() {
int v; int i; for(i=0; i<=255; i++) {analogWrite(SVET_YARK_PIN,i); if (DEBUG) { Serial.println(i); } v=ulTaskNotifyTake(0,vyklYarkBlockTime); if (v>0) { DvizhEst(i); 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() {
return yarkost>0;
} }
void Vklyuchit() { void Vklyuchit() {
digitalWrite(SVET_YARK_PIN,0); digitalWrite(SVET_ONOFF_PIN,1); Yarkost(MAX_YARKOST); Enable();
} }
void Vyklyuchit() { void Vyklyuchit() {
digitalWrite(SVET_YARK_PIN,1); digitalWrite(SVET_ONOFF_PIN,0); Yarkost(MIN_YARKOST); Disable();
}
void Yarkost(int i) {
analogWrite(SVET_YARK_PIN,255-i);
}
void Enable() {
digitalWrite(SVET_ONOFF_PIN,1);
}
void Disable() {
digitalWrite(SVET_ONOFF_PIN,0);
} }
void TaskSveta() { void TaskSveta() {
int v; while(1) {v=ulTaskNotifyTake(0,loopBlockTime); if (v>0) { DvizhEst(255); } else { DvizhaNet(); }} int v; while(1) {v=ulTaskNotifyTake(0,loopBlockTime); if (v>0) { DvizhEst(); } else { DvizhaNet(); }}
} }

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

@ -8,31 +8,36 @@ import (
"my/go-controller/timer" "my/go-controller/timer"
) )
// 150 - примерно то же, что и 255 (должно быть те 1.25В где-то там же)
// 100 - средненько
const MAX_YARKOST int = 100
const MIN_YARKOST int = 0
const VREMYA_SVETA uint32 = 20000 const VREMYA_SVETA uint32 = 20000
var loopBlockTime task.TickType = task.MS_TO_TICKS(1000) var loopBlockTime task.TickType = task.MS_TO_TICKS(1000)
var vklYarkBlockTime int = 10 var vklYarkBlockTime int = 10
var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(50) var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(50)
var vkl bool var yarkost int
var kogdaVyklyuchit uint32 var kogdaVyklyuchit uint32
func initSvet() { func initSvet() {
vkl = false yarkost = 0
kogdaVyklyuchit = 0 kogdaVyklyuchit = 0
Vyklyuchit() Vyklyuchit()
} }
func DvizhEst(start int) { func DvizhEst() {
kogdaVyklyuchit = timer.Millis() + VREMYA_SVETA kogdaVyklyuchit = timer.Millis() + VREMYA_SVETA
if !vkl { if !Vklyucheno() {
vkl = true
if DEBUG { if DEBUG {
serial.Println("Vkl svet") serial.Println("Vkl svet")
} }
PlavnoVklyuchit(start) PlavnoVklyuchit()
} }
} }
func DvizhaNet() { func DvizhaNet() {
@ -40,8 +45,7 @@ func DvizhaNet() {
return return
} }
if vkl { if Vklyucheno() {
vkl = false
if DEBUG { if DEBUG {
serial.Println("Vykl") serial.Println("Vykl")
} }
@ -49,14 +53,13 @@ func DvizhaNet() {
} }
} }
func PlavnoVklyuchit(start int) { func PlavnoVklyuchit() {
digital.Write(SVET_ONOFF_PIN, 1) Enable()
var i int for yarkost = yarkost; yarkost <= MAX_YARKOST; yarkost++ {
for i = start; i >= 0; i-- { Yarkost(yarkost)
analog.Write(SVET_YARK_PIN, i)
if DEBUG { if DEBUG {
serial.Println(i) serial.Println(yarkost)
} }
timer.Delay(vklYarkBlockTime) timer.Delay(vklYarkBlockTime)
} }
@ -65,28 +68,41 @@ func PlavnoVklyuchit(start int) {
} }
func PlavnoVyklyuchit() { func PlavnoVyklyuchit() {
var v int var v int
var i int for yarkost = yarkost; yarkost >= MIN_YARKOST; yarkost-- {
for i = 0; i <= 255; i++ { Yarkost(yarkost)
analog.Write(SVET_YARK_PIN, i)
if DEBUG { if DEBUG {
serial.Println(i) serial.Println(yarkost)
} }
v = task.TaskNotifyTake(0, vyklYarkBlockTime) v = task.TaskNotifyTake(0, vyklYarkBlockTime)
if v > 0 { if v > 0 {
DvizhEst(i) DvizhEst()
return return
} }
} }
Vyklyuchit() Vyklyuchit()
} }
func Vklyucheno() bool {
return yarkost > 0
}
func Vklyuchit() { func Vklyuchit() {
digital.Write(SVET_YARK_PIN, 0) // логика яркости инвертирована Yarkost(MAX_YARKOST)
digital.Write(SVET_ONOFF_PIN, 1) Enable()
} }
func Vyklyuchit() { func Vyklyuchit() {
digital.Write(SVET_YARK_PIN, 1) // логика яркости инвертирована Yarkost(MIN_YARKOST)
Disable()
}
func Yarkost(i int) {
// логика яркости инвертирована
analog.Write(SVET_YARK_PIN, 255-i)
}
func Enable() {
digital.Write(SVET_ONOFF_PIN, 1)
}
func Disable() {
digital.Write(SVET_ONOFF_PIN, 0) digital.Write(SVET_ONOFF_PIN, 0)
} }
@ -105,7 +121,7 @@ func TaskSveta() {
deferred interrupt event is processed at a time. */ deferred interrupt event is processed at a time. */
v = task.TaskNotifyTake(0, loopBlockTime) v = task.TaskNotifyTake(0, loopBlockTime)
if v > 0 { if v > 0 {
DvizhEst(255) DvizhEst()
} else { } else {
DvizhaNet() DvizhaNet()
} }