gpt4 book ai didi

C#串口问题——太简单了,不过不行

转载 作者:行者123 更新时间:2023-11-30 14:17:32 30 4
gpt4 key购买 nike

好的,这应该很简单。我正在尝试从串行设备读取字符。就是这样,如果我发送一个空格字符,它会回显一串数字和 EOL。就是这样。

我使用的是 Unity 3.3(.Net 2.0 支持),“串口”是一个 Prolific 串口转 USB 适配器。顺便说一句:使用 Hyperterminal,它一切正常,所以我知道它不是驱动程序也不是硬件。

我可以正常打开端口。看来我可以用 port.Write(""); 发送我的空间了但是,即使我尝试调用 ReadChar、ReadByte 或 ReadLine(如轮询),它也会卡住,直到我拔下 USB,并且我的控制台输出什么也没有显示(捕获到异常)。

所以我设置了一个 DataReceviedHandler,但它从未被调用。

我读过一些帖子,其中人们用 Arduinos 等(这不是 Arduino,但是嘿)做了这种事情,只使用了 ReadLine。他们的代码对我不起作用(到目前为止,这些作者还没有给出答案)。

那么,有什么建议吗?我需要使用不同的线程吗?如果您知道任何 Unity (Mono) 编码,非常感谢您提供这些方面的任何提示。

此代码是来自 http://plikker.com/?p=163 的混搭和 http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx#Y537

using UnityEngine;
using System.Collections;
using System.IO.Ports;
using System;

public class SerialTest : MonoBehaviour {

SerialPort stream;

void Start () {
try {
stream = new SerialPort("COM3", 9600);
stream.Parity = Parity.None;
stream.StopBits = StopBits.One;
stream.DataBits = 8;
stream.Handshake = Handshake.None;
stream.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler);


stream.Open();
Debug.Log("opened ok"); // it DOES open ok!
} catch (Exception e){
Debug.Log("Error opening port "+e.ToString()); // I never see this message
}
}

void Update () { // called about 60 times/second
try {
// Read serialinput from COM3
// if this next line is here, it will hang, I don't even see the startup message
Debug.Log(stream.ReadLine());
// Note: I've also tried ReadByte and ReadChar and the same problem, it hangs
} catch (Exception e){
Debug.Log("Error reading input "+e.ToString());
}
}

private static void DataReceviedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender; // It never gets here!
string indata = sp.ReadExisting();
Debug.Log("Data Received:");
Debug.Log(indata);
}

void OnGUI() // simple GUI
{
// Create a button that, when pressed, sends the 'ping'
if (GUI.Button (new Rect(10,10,100,20), "Send"))
stream.Write(" ");
}
}

最佳答案

事件未在 Mono SerialPort 类中实现,因此您不会收到任何通知,您必须执行(阻塞)显式读取。其他可能的问题 - 我不确定 Unity Behaviors 是如何工作的,你确定所有访问 SerialPort 的方法都是在同一个线程上调用的吗?而且你没有处理你的端口对象,这也会导致问题。

关于C#串口问题——太简单了,不过不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5727473/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com