2021-08-10 21:29:24 +00:00
|
|
|
package hw
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/warthog618/gpiod"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2022-03-05 19:42:17 +00:00
|
|
|
pinCoolerPower = 23
|
|
|
|
pinHeaterPower = 24
|
2021-08-10 21:29:24 +00:00
|
|
|
|
|
|
|
off = 0
|
|
|
|
on = 1
|
|
|
|
)
|
|
|
|
|
|
|
|
type Gpio struct {
|
|
|
|
chip *gpiod.Chip
|
|
|
|
coolerPower *gpiod.Line
|
|
|
|
heaterPower *gpiod.Line
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewGpio() (*Gpio, error) {
|
|
|
|
var err error
|
|
|
|
p := &Gpio{}
|
|
|
|
|
|
|
|
p.chip, err = gpiod.NewChip("gpiochip0", gpiod.WithConsumer("fermentord"))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
p.coolerPower, err = p.chip.RequestLine(pinCoolerPower, gpiod.AsOutput(1))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
p.heaterPower, err = p.chip.RequestLine(pinHeaterPower, gpiod.AsOutput(1))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return p, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Gpio) Close() {
|
|
|
|
p.coolerPower.SetValue(off)
|
|
|
|
p.heaterPower.SetValue(off)
|
|
|
|
|
|
|
|
p.heaterPower.Close()
|
|
|
|
p.coolerPower.Close()
|
|
|
|
p.chip.Close()
|
|
|
|
}
|
2021-08-30 20:46:38 +00:00
|
|
|
|
|
|
|
func (p *Gpio) StartCooler() {
|
|
|
|
p.coolerPower.SetValue(on)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Gpio) StopCooler() {
|
|
|
|
p.coolerPower.SetValue(off)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Gpio) StartHeater() {
|
|
|
|
p.heaterPower.SetValue(on)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p *Gpio) StopHeater() {
|
|
|
|
p.heaterPower.SetValue(off)
|
|
|
|
}
|