gpt4 book ai didi

multithreading - 使用 Arduino 从串口读取垃圾输出

转载 作者:IT王子 更新时间:2023-10-29 02:09:46 25 4
gpt4 key购买 nike

我目前正在尝试使用多线程通过 Arduino 从串口读取输入。我有两个线程从串行端口读取,它们都在读取相同的东西(忽略它们的函数名称)。这是代码:

 func readFirstLine(scanner *bufio.Scanner, port *serial.Port){
for scanner.Scan() {
log.Printf("%q\n", scanner.Text())
}
time.Sleep(time.Duration(1)*time.Second)
}

func readSecondLine(scanner *bufio.Scanner, port *serial.Port){
time.Sleep(time.Duration(1)*time.Second)
for scanner.Scan() {
log.Printf("%q\n", scanner.Text())
}
}

func main() {
usbRead := &serial.Config{Name: "COM5", Baud: 9600, ReadTimeout: 0}
port, err := serial.OpenPort(usbRead)

if err != nil {
log.Fatal(err)
}

scanner := bufio.NewScanner(port)

for true {
go readFirstLine(scanner, port)
go readSecondLine(scanner, port)
time.Sleep(time.Duration(2)*time.Second)
}
}

我希望输出看起来像这样:

{"temperature":[26,26],"humidity":[54.2,54.2],"sensor":"DHT22"}
{"temperature":[23.46041,23.46041],"sensor":"LM35DZ"}
{"blink":["true","true"],"actuator":"arduinoLED"}
{"temperature":[26,26],"humidity":[54.2,54.2],"sensor":"DHT22"}
{"temperature":[23.46041,23.46041],"sensor":"LM35DZ"}
{"blink":["true","true"],"actuator":"arduinoLED"}

但我在预期输出之间得到垃圾输出:

"{\"temperature\":[23.46041,23.46041,23.46041],\"sensor\":\"LM35DZ\"}"
"{\"blink\":[\"true\",\"true\",\"true\"],\"actuator\":\"arduinoLED\"}"
"mpeer\x00\x00re\"u:\x00\x00[]6\x00midhui\x00\x00[54\":.\x00\x00sen,\"s\x00\x00:or\"\"TH\x00"
{\"}\"\x00\x00ptemurrate\x003.4[26\x00\x00,\"s1]e\x00\x00\":\"orL\x00\x00Z\"}5D\r\x00\x00\x00"

我认为出现此垃圾输出是因为即使 Arduino 未输出任何内容,我仍在读取串行端口输入。关于如何解决这个问题有什么想法吗?谢谢。

最佳答案

您正在同时读取和写入没有同步机制的 bufio.Scanner

引用:Introducing the Go Race Detector

关于multithreading - 使用 Arduino 从串口读取垃圾输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50573709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com