c# - 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();
知道发生了什么吗?
谢谢!
解决方案
如果您在 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 !!!
}
}
}
}
推荐阅读
- java - 如何递归删除列表中具有特定值的节点
- django - Django:计算字段 + admin_order_field + action => FieldError:无法解析关键字
- xml - 使用 bash 读取和解析 kodi nfo 文件的 XML
- javascript - 如何以角度 6 从 byteArraay 下载 PDF?
- java - 如何处理 DB mysql 中的特殊字符
- django - How can I manually edit a specific attribute in a model through Django Shell?
- ios - 在设备上运行时,请参阅 Xcode 中 React Native 应用程序的 console.log
- node.js - jit-grunt:未找到“watch”任务的插件
- python - os.listdir() - 根据条件从返回的列表中随机选择
- c# - 在 ASP.NET Core MVC webapp 中在经过身份验证的用户的上下文中查询 AD