/
buttons.go
47 lines (37 loc) · 904 Bytes
/
buttons.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package main
import (
"time"
"github.com/kzyapkov/gpio"
"github.com/kzyapkov/pesho/util"
)
type Button string
const RedButton Button = "RED"
const GreenButton Button = "GREEN"
type buttons struct {
Presses chan Button
red gpio.Pin
green gpio.Pin
}
func newButtons(redN, greenN int) (*buttons, error) {
var red, green gpio.Pin
var err error
if red, err = gpio.OpenPin(redN, gpio.ModeInput); err != nil {
return nil, err
}
if green, err = gpio.OpenPin(greenN, gpio.ModeInput); err != nil {
_ = red.Close()
return nil, err
}
btns := &buttons{
Presses: make(chan Button, 10),
red: util.Debounced(red, 20*time.Millisecond),
green: util.Debounced(green, 20*time.Millisecond),
}
btns.red.BeginWatch(gpio.EdgeFalling, func() {
btns.Presses <- RedButton
})
btns.green.BeginWatch(gpio.EdgeFalling, func() {
btns.Presses <- GreenButton
})
return btns, nil
}