70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"esdi/sources/beamng"
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func beamngExample(esdi ESDI) {
|
|
bIF, err := beamng.Init("127.0.0.1", 4444)
|
|
if err != nil {
|
|
log.Fatalf("Failed to create BeamNG interface: %v", err)
|
|
}
|
|
|
|
esdi.Source = &bIF
|
|
|
|
lastTime := time.Now().UnixMilli()
|
|
lastDataSent := time.Now().UnixMilli()
|
|
for {
|
|
var err error
|
|
var buffer strings.Builder
|
|
buffer.WriteString("\033[?25l\033[2J\033[H")
|
|
|
|
err = esdi.Source.UpdateData()
|
|
if err != nil {
|
|
fmt.Printf("could not update data: %v", err)
|
|
continue
|
|
}
|
|
|
|
curGear, err := esdi.Source.GetData("Gear")
|
|
if err != nil {
|
|
log.Fatalf("could not get field `Gear`: %v", err)
|
|
}
|
|
|
|
curRPM, err := esdi.Source.GetData("RPM")
|
|
if err != nil {
|
|
log.Fatalf("could not get field `RPM`: %v", err)
|
|
}
|
|
|
|
gear := int(curGear.(int8))
|
|
rpm := int(curRPM.(float32))
|
|
|
|
buffer.WriteString(fmt.Sprintf("Gear: %d, RPM: %d", gear, rpm))
|
|
|
|
curTime := time.Now().UnixMilli()
|
|
message := fmt.Sprintf("%d,%d\n", gear-1, rpm)
|
|
buffer.WriteString("\n" + message)
|
|
|
|
messageWasSentMark := "N"
|
|
if curTime-lastDataSent > 75 {
|
|
_, err = esdi.SerialConn.Write([]byte(message))
|
|
if err != nil {
|
|
log.Printf("Unable to write data: %v", err)
|
|
break
|
|
}
|
|
|
|
messageWasSentMark = "Y"
|
|
lastDataSent = curTime
|
|
}
|
|
|
|
buffer.WriteString(" -> " + messageWasSentMark)
|
|
if curTime-lastTime > 100 {
|
|
fmt.Print(buffer.String())
|
|
lastTime = curTime
|
|
}
|
|
}
|
|
}
|