Чтение с последовательного порта с использованием Arduino для вывода мусора - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время я пытаюсь прочитать ввод с последовательного порта через 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 ничего не выводил.Есть какие нибудь идеи как это исправить?Благодарю.

1 Ответ

0 голосов
/ 29 мая 2018

Вы одновременно читаете и пишете на bufio.Scanner без механизма синхронизации.

Ссылка: Представляем Go Race Detector

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...