CobraV2/serial_read/main.go
foglar b7c477b37e Documentation created
- Serial reader read data, and outputs them
- Sender send temperature
- Receiver transmits data via serial
2024-01-28 11:44:55 +01:00

102 lines
1.6 KiB
Go

package main
import (
"fmt"
"github.com/tarm/serial"
"log"
"os"
"time"
)
func portInput() string {
var port string
for true {
port = ""
fmt.Print("Enter port to listen on (for example - '/dev/ttyACM0'): ")
fmt.Scanln(&port)
if port == "" {
port = "/dev/ttyACM0"
}
_, err := os.Stat(port)
if !os.IsNotExist(err) {
break
} else {
fmt.Println("Invalid port")
}
}
return port
}
func baudrateInput() int {
var baudrate int
var s_baudrate string
fmt.Print("Enter baudrate (for example - '9600'): ")
fmt.Scanln(&s_baudrate)
switch s_baudrate {
case "4800":
baudrate = 4800
case "9600":
baudrate = 9600
case "115200":
baudrate = 115200
default:
baudrate = 9600
}
return baudrate
}
func UserInput() (string, int) {
port := portInput()
baudrate := baudrateInput()
return port, baudrate
}
func getTime() string {
return time.Now().Format("2006-1-2_15:4:5")
}
func main() {
// User input
port, baudrate := UserInput()
// Listen on port
fmt.Printf("Listening on port %s with baudrate %d:\n", port, baudrate)
c := &serial.Config{Name: port, Baud: baudrate}
// Create file
filename := getTime() + ".txt"
f, err := os.Create(filename)
if err != nil {
log.Fatal(err)
}
defer f.Close()
// Open port
s, err := serial.OpenPort(c)
if err != nil {
log.Fatal(err)
}
var n int
for {
// create a buffer
buf := make([]byte, 254)
// Read length of serial input
n, err = s.Read(buf)
if err != nil {
log.Fatal(err)
}
// Print as a string
fmt.Print(string(buf[:n]))
f.WriteString(string(buf[:n]))
}
}