Lecture non bloquante du port série à l'aide d'une boucle While
Dans ce programme, le but est de communiquer avec un capteur via une boucle série Port tout en évitant l'utilisation du temps. Sommeil pour lire les données. Malheureusement, la tentative initiale utilisant une boucle while a échoué en raison de l'écrasement du tampon de données à chaque itération de la boucle.
La solution réside dans la mise en œuvre d'une approche de lecture orientée octet, menée par l'introduction de bufio.Reader. Ce lecteur orienté flux fournit un mécanisme plus sophistiqué et plus robuste pour la communication série.
<code class="go">package main import ( "bufio" "fmt" "github.com/tarm/goserial" ) func main() { c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 9600} s, err := serial.OpenPort(c) if err != nil { fmt.Println(err) } _, err = s.Write([]byte("\x16\x02N0C0 G A\x03\x0d\x0a")) if err != nil { fmt.Println(err) } reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') // Read until a newline character is encountered if err != nil { panic(err) } fmt.Println(reply) s.Close() }</code>
Avec cette modification, le programme lira en continu les données entrantes jusqu'à ce que le délimiteur spécifié (dans ce cas, x0a) soit rencontré. Cette approche garantit une récupération de données fiable sans avoir besoin d'opérations de blocage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!