mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-04-02 09:00:24 +02:00
Imteracting with waveshare OLED buttons (testing gpio libs)
This commit is contained in:
parent
de70e8360d
commit
86eff23db0
70
ntest.go
70
ntest.go
@ -1,9 +1,11 @@
|
||||
// +build linux
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/mame82/P4wnP1_go/service"
|
||||
"github.com/mame82/P4wnP1_go/service/peripheral"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/signal"
|
||||
@ -201,43 +203,49 @@ func ReadState() (regval *HprtData, err error) {
|
||||
return regval, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
btsvc := service.NewBtService()
|
||||
err := btsvc.StartNAP()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
||||
func main() {
|
||||
wo := peripheral.WaveshareOled{}
|
||||
wo.Start()
|
||||
/*
|
||||
dwc := dwc2.NewDwc2Nl(24)
|
||||
err := dwc.OpenNlKernelSock()
|
||||
|
||||
if err == nil {
|
||||
dwc.SocketReaderLoop2()
|
||||
} else {
|
||||
fmt.Println("Err: ", err)
|
||||
}
|
||||
dwc.Close()
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
i := 0
|
||||
for {
|
||||
res, err := ReadState()
|
||||
if err == nil {
|
||||
fmt.Printf("%d %+v\n ", i, res)
|
||||
} else {
|
||||
fmt.Println(err)
|
||||
}
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
i++
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
w := service.NewDwc2ConnectWatcher()
|
||||
w.Start()
|
||||
*/
|
||||
|
||||
fmt.Println("Stop with SIGTERM or SIGINT")
|
||||
sig := make(chan os.Signal)
|
||||
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
||||
si := <-sig
|
||||
fmt.Printf("Signal (%v) received, ending P4wnP1_service ...\n", si)
|
||||
wo.Stop()
|
||||
//w.Stop()
|
||||
|
||||
|
||||
btsvc.StopNAP()
|
||||
|
||||
|
||||
/*
|
||||
wsvc := service.NewWifiService()
|
||||
res, err := wsvc.UpdateStateFromIw()
|
||||
if err == nil {
|
||||
fmt.Printf("Wifi state: %+v\n", res)
|
||||
} else {
|
||||
fmt.Println("Error retrieving WiFi state")
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
for {
|
||||
res, err := ReadState()
|
||||
if err == nil {
|
||||
fmt.Printf("%+v\n ", res)
|
||||
} else {
|
||||
fmt.Println(err)
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
132
service/peripheral/Oled128_64.go
Normal file
132
service/peripheral/Oled128_64.go
Normal file
@ -0,0 +1,132 @@
|
||||
package peripheral
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/warthog618/gpio"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
// https://www.waveshare.com/1.3inch-oled-hat.htm
|
||||
|
||||
KEY1 P21 Button 1/GPIO
|
||||
KEY2 P20 Button 2/GPIO
|
||||
KEY3 P16 Button 3/GPIO
|
||||
Joystick Up P6 Joystick Up
|
||||
Joystick Down P19 Joystick Down
|
||||
Joystick Left P5 Joystick Left
|
||||
Joystick Right P26 Joystick Right
|
||||
Joystick Press P13 Joystick Press
|
||||
SCLK P11/SCLK SPI clock input
|
||||
MOSI P10/MOSI SPI data input
|
||||
DC P24 Data/Command selection (high for data, low for command)
|
||||
CS P8/CE0 Chip selection, low active
|
||||
RST P25 Reset, low active
|
||||
*/
|
||||
|
||||
var timeLastEvent time.Time
|
||||
const (
|
||||
WAVESHARE_OLED_GPIO_KEY_1 = gpio.GPIO21
|
||||
WAVESHARE_OLED_GPIO_KEY_2 = gpio.GPIO20
|
||||
WAVESHARE_OLED_GPIO_KEY_3 = gpio.GPIO16
|
||||
|
||||
WAVESHARE_OLED_GPIO_JOY_UP = gpio.GPIO6
|
||||
WAVESHARE_OLED_GPIO_JOY_DOWN = gpio.GPIO19
|
||||
WAVESHARE_OLED_GPIO_JOY_LEFT = gpio.GPIO5
|
||||
WAVESHARE_OLED_GPIO_JOY_RIGHT = gpio.GPIO26
|
||||
WAVESHARE_OLED_GPIO_JOY_PRESS = gpio.GPIO13
|
||||
)
|
||||
|
||||
var waveshareRelevantEvents = []uint8{
|
||||
WAVESHARE_OLED_GPIO_JOY_DOWN,
|
||||
WAVESHARE_OLED_GPIO_JOY_LEFT,
|
||||
WAVESHARE_OLED_GPIO_JOY_RIGHT,
|
||||
WAVESHARE_OLED_GPIO_JOY_UP,
|
||||
WAVESHARE_OLED_GPIO_JOY_PRESS,
|
||||
WAVESHARE_OLED_GPIO_KEY_1,
|
||||
WAVESHARE_OLED_GPIO_KEY_2,
|
||||
WAVESHARE_OLED_GPIO_KEY_3,
|
||||
}
|
||||
|
||||
type WaveshareOledEvent int
|
||||
|
||||
const (
|
||||
PRESSED_UP WaveshareOledEvent = iota
|
||||
PRESSED_DOWN
|
||||
PRESSED_LEFT
|
||||
PRESSED_RIGHT
|
||||
PRESSED_STICK
|
||||
|
||||
PRESSED_KEY1
|
||||
PRESSED_KEY2
|
||||
PRESSED_KEY3
|
||||
)
|
||||
|
||||
var pin2function = map[uint8]WaveshareOledEvent{
|
||||
WAVESHARE_OLED_GPIO_KEY_1: PRESSED_KEY1,
|
||||
WAVESHARE_OLED_GPIO_KEY_2: PRESSED_KEY2,
|
||||
WAVESHARE_OLED_GPIO_KEY_3: PRESSED_KEY3,
|
||||
WAVESHARE_OLED_GPIO_JOY_UP: PRESSED_UP,
|
||||
WAVESHARE_OLED_GPIO_JOY_DOWN: PRESSED_DOWN,
|
||||
WAVESHARE_OLED_GPIO_JOY_LEFT: PRESSED_LEFT,
|
||||
WAVESHARE_OLED_GPIO_JOY_RIGHT: PRESSED_RIGHT,
|
||||
WAVESHARE_OLED_GPIO_JOY_PRESS: PRESSED_STICK,
|
||||
}
|
||||
|
||||
var function2string = map[WaveshareOledEvent]string{
|
||||
PRESSED_KEY1: "KEY 1",
|
||||
PRESSED_KEY2: "KEY 2",
|
||||
PRESSED_KEY3: "KEY 3",
|
||||
PRESSED_UP: "UP",
|
||||
PRESSED_DOWN: "DOWN",
|
||||
PRESSED_LEFT: "LEFT",
|
||||
PRESSED_RIGHT: "RIGHT",
|
||||
PRESSED_STICK: "STICK",
|
||||
}
|
||||
|
||||
type WaveshareOled struct {
|
||||
pins []*gpio.Pin
|
||||
gpioOpened bool
|
||||
}
|
||||
|
||||
func (w *WaveshareOled) GetHandler(event WaveshareOledEvent) (func(*gpio.Pin)) {
|
||||
timeLastEvent = time.Now()
|
||||
return func(pin *gpio.Pin) {
|
||||
if str,okay := function2string[event]; okay {
|
||||
if time.Since(timeLastEvent) > 200*time.Millisecond {
|
||||
fmt.Printf("%s pressed\n", str)
|
||||
timeLastEvent = time.Now()
|
||||
|
||||
// send to output channel if needed here
|
||||
}
|
||||
//fmt.Printf("%+v\n", pin)
|
||||
} else {
|
||||
fmt.Println("Unknown GPIO input")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (w *WaveshareOled) Start() (err error) {
|
||||
err = gpio.Open()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
w.pins = make([]*gpio.Pin, len(waveshareRelevantEvents))
|
||||
for idx, evtPinNum := range waveshareRelevantEvents {
|
||||
pin := gpio.NewPin(evtPinNum)
|
||||
w.pins[idx] = pin
|
||||
pin.Input()
|
||||
pin.PullUp()
|
||||
pin.Watch(gpio.EdgeFalling, w.GetHandler(pin2function[evtPinNum]))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *WaveshareOled) Stop() {
|
||||
for _, p := range w.pins {
|
||||
p.Unwatch()
|
||||
p.PullNone()
|
||||
}
|
||||
gpio.Close()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user