Arduino Serial.println仅正确打印第一个字符

时间:2019-06-27 19:38:40

标签: c# arduino

我有以下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();

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果在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 !!!
            }
        }
    }
}