113 строки
2,2 КиБ
Go
113 строки
2,2 КиБ
Go
package app
|
|
|
|
import (
|
|
"my/go-controller/analog"
|
|
"my/go-controller/digital"
|
|
"my/go-controller/serial"
|
|
"my/go-controller/task"
|
|
"my/go-controller/timer"
|
|
)
|
|
|
|
const VREMYA_SVETA uint32 = 20000
|
|
|
|
var loopBlockTime task.TickType = task.MS_TO_TICKS(1000)
|
|
var vklYarkBlockTime task.TickType = task.MS_TO_TICKS(10)
|
|
var vyklYarkBlockTime task.TickType = task.MS_TO_TICKS(50)
|
|
|
|
var vkl bool
|
|
var kogdaVyklyuchit uint32
|
|
|
|
func initSvet() {
|
|
vkl = false
|
|
kogdaVyklyuchit = 0
|
|
|
|
Vyklyuchit()
|
|
}
|
|
|
|
func DvizhEst(start int) {
|
|
kogdaVyklyuchit = timer.Millis() + VREMYA_SVETA
|
|
|
|
if !vkl {
|
|
vkl = true
|
|
if DEBUG {
|
|
serial.Println("Vkl svet")
|
|
}
|
|
PlavnoVklyuchit(start)
|
|
}
|
|
}
|
|
func DvizhaNet() {
|
|
if kogdaVyklyuchit > timer.Millis() {
|
|
return
|
|
}
|
|
|
|
if vkl {
|
|
vkl = false
|
|
if DEBUG {
|
|
serial.Println("Vykl")
|
|
}
|
|
PlavnoVyklyuchit()
|
|
}
|
|
}
|
|
|
|
func PlavnoVklyuchit(start int) {
|
|
digital.Write(SVET_ONOFF_PIN, 1)
|
|
|
|
var i int
|
|
for i = start; i >= 0; i-- {
|
|
analog.Write(SVET_YARK_PIN, i)
|
|
if DEBUG {
|
|
serial.Println(i)
|
|
}
|
|
timer.Delay(5)
|
|
}
|
|
|
|
Vklyuchit()
|
|
}
|
|
func PlavnoVyklyuchit() {
|
|
var v int
|
|
var i int
|
|
for i = 0; i <= 255; i++ {
|
|
analog.Write(SVET_YARK_PIN, i)
|
|
if DEBUG {
|
|
serial.Println(i)
|
|
}
|
|
|
|
v = task.TaskNotifyTake(0, vyklYarkBlockTime)
|
|
if v > 0 {
|
|
DvizhEst(i)
|
|
return
|
|
}
|
|
}
|
|
Vyklyuchit()
|
|
}
|
|
|
|
func Vklyuchit() {
|
|
digital.Write(SVET_YARK_PIN, 0) // логика яркости инвертирована
|
|
digital.Write(SVET_ONOFF_PIN, 1)
|
|
}
|
|
func Vyklyuchit() {
|
|
digital.Write(SVET_YARK_PIN, 1) // логика яркости инвертирована
|
|
digital.Write(SVET_ONOFF_PIN, 0)
|
|
}
|
|
|
|
func TaskSveta() {
|
|
var v int
|
|
|
|
for {
|
|
/* Block to wait for a notification. Here the RTOS
|
|
task notification is being used as a counting semaphore.
|
|
The task's notification value is incremented each time
|
|
the ISR calls vTaskNotifyGiveFromISR(), and decremented
|
|
each time the RTOS task calls ulTaskNotifyTake() - so in
|
|
effect holds a count of the number of outstanding interrupts.
|
|
The first parameter is set to pdFALSE, so the notification
|
|
value is only decremented and not cleared to zero, and one
|
|
deferred interrupt event is processed at a time. */
|
|
v = task.TaskNotifyTake(0, loopBlockTime)
|
|
if v > 0 {
|
|
DvizhEst(255)
|
|
} else {
|
|
DvizhaNet()
|
|
}
|
|
}
|
|
}
|