- package main
-
- import (
- "encoding/binary"
- "fmt"
- "log"
- "time"
-
- "github.com/goburrow/serial"
-
- modbus "github.com/things-go/go-modbus"
- )
-
-
-
- type PAGRegister uint16
-
- const (
- PAGUp PAGRegister = 1 << iota // PAG向上
- PAGDown // PAG向下
- PAGLeft // PAG向左
- PAGRight // PAG向右
- PAGForward // PAG向前
- PAGBackward // PAG向后
- PAGClockwise // PAG顺时针旋转
- PAGCounterclockwise // PAG逆时针旋转
- PAGWave // PAG挥手
- PAGHover // PAG悬停
- PAGUnknown // PAG未知
- PAGObjectAppearDisappear // PAG目标出现/消失(保留)
- PAGHLModeChange // PAG高低模式切换(保留)
- PAGProximity // PAG接近(保留)
- PAGClockwiseContinuous // PAG顺时针连续旋转
- PAGCounterclockwiseContinuous // PAG逆时针连续旋转
- )
-
- func (r PAGRegister) Has(flag PAGRegister) bool {
- return r&flag != 0
- }
-
- func main() {
- p := modbus.NewRTUClientProvider(modbus.WithEnableLogger(),
- modbus.WithSerialConfig(serial.Config{
- Address: "COM4",
- BaudRate: 9600,
- DataBits: 8,
- StopBits: 1,
- Parity: "N",
- Timeout: modbus.SerialDefaultTimeout,
- }))
-
- client := modbus.NewClient(p)
- client.LogMode(false)
-
- err := client.Connect()
- if err != nil {
- fmt.Println("connect failed, ", err)
- return
- }
- defer client.Close()
-
- fmt.Println("starting")
- //复位传感器
- client.WriteSingleRegister(0x73,0x0018,1)
-
- var lastPag PAGRegister
-
- for {
-
-
- // 读取0x0007地址的输入寄存器
- results, err := client.ReadInputRegistersBytes(0x73,0x0007,2)
- if err != nil {
- log.Fatal(err)
- }
-
- //fmt.Printf("%b\n", results)
-
- // 解析PAG寄存器的值
- pag := PAGRegister(binary.BigEndian.Uint16(results))
-
- // 比较当前值和上次值是否相同,相同则跳过
- if pag == lastPag {
- continue
- }
- lastPag = pag
-
- //跳过未知和保留的姿势
- if pag.Has(PAGUnknown) || pag.Has(PAGObjectAppearDisappear) ||pag.Has(PAGHLModeChange) ||pag.Has(PAGProximity) {
- continue
- }
-
- // 输出解析后的PAG值和时间标记
- now := time.Now().Format("2006-01-02 15:04:05.000") // 格式化当前时间
- fmt.Printf("[%s] ", now)
-
- // 输出解析后的PAG值
- if pag.Has(PAGUp) {
- fmt.Println("PAG向上")
- }
- if pag.Has(PAGDown) {
- fmt.Println("PAG向下")
- }
- if pag.Has(PAGLeft) {
- fmt.Println("PAG向左")
- }
- if pag.Has(PAGRight) {
- fmt.Println("PAG向右")
- }
- if pag.Has(PAGForward) {
- fmt.Println("PAG向前")
- }
- if pag.Has(PAGBackward) {
- fmt.Println("PAG向后")
- }
- if pag.Has(PAGClockwise) {
- fmt.Println("PAG顺时针旋转")
- }
- if pag.Has(PAGCounterclockwise) {
- fmt.Println("PAG逆时针旋转")
- }
- if pag.Has(PAGWave) {
- fmt.Println("PAG挥手")
- }
- if pag.Has(PAGHover) {
- fmt.Println("PAG悬停")
- }
- //if pag.Has(PAGUnknown) {
- // fmt.Println("PAG未知")
- //}
- //if pag.Has(PAGObjectAppearDisappear) {
- // fmt.Println("PAG目标出现/消失(保留)")
- //}
- //if pag.Has(PAGHLModeChange) {
- // fmt.Println("PAG高低模式切换(保留)")
- //}
- //if pag.Has(PAGProximity) {
- // fmt.Println("PAG接近(保留)")
- //}
- if pag.Has(PAGClockwiseContinuous) {
- fmt.Println("PAG顺时针连续旋转")
- }
- if pag.Has(PAGCounterclockwiseContinuous) {
- fmt.Println("PAG逆时针连续旋转")
- }
-
-
- // 等待1毫秒
- time.Sleep(1 * time.Millisecond)
- }
- }
-
复制代码
|