首页 > 解决方案 > Arduino Serial.println 仅正确打印第一个字符

问题描述

我有以下 Arduino 草图:

int hygrometer = A3;

void setup(){
  Serial.begin(9600);
}

void loop(){
  int value = analogRead(hygrometer);    
  value = constrain(value,400,1023);  
  value = map(value,400,1023,100,0);  
  Serial.println(value);
  delay(2000);
}

但是,在串行通信的另一端(运行 Raspbian 的 Raspberry Pi 上托管的 .NET Core 应用程序),我得到了一些奇怪的结果,因为只有第一个字符正确显示,其余的只是随机字节。此外,如果我在没有应用程序监听串行运行的情况下运行串行监视器,则值会正确显示。但是,在我启动应用程序的那一刻,串行监视器显示相同的内容。

这是用于初始化串行通信的 .NET Core 代码:

SerialDevice serial = new SerialDevice(port1, BaudRate.B9600);

serial.Parity = Parity.None;
serial.StopBits = StopBits.One;
serial.DataBits = 8;
serial.Handshake = Handshake.None;

serial.DataReceived += DataReceivedHandler;

if (serial != null && serial.IsOpen)
    serial.Close();

serial.Open();

知道发生了什么吗?

谢谢!

标签: c#arduino

解决方案


如果您在 while 循环中运行读数,也许您可​​以捕获其余的位。试试这个:

using System;
using System.IO.Ports;
using System.Threading;
namespace ConsoleApp1
{
    class Program
    {
        static SerialPort _serialPort;
        public static void Main()
        {
            _serialPort = new SerialPort();
            _serialPort.PortName = "COM4";  //Set your board COM
            _serialPort.BaudRate = 9600;
            _serialPort.Open();
            while (true)
            {
                string a = _serialPort.ReadExisting();
                Console.WriteLine(a);
                Thread.Sleep(200); // !!! Not sure if this is necessary !!!
            }
        }
    }
}

推荐阅读