我有以下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();
有什么想法吗?
谢谢!
答案 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 !!!
}
}
}
}