首页 新闻 会员 周边 捐助

Unity 接收串口数据(Unity Serial Port)

1
悬赏园豆:20 [已关闭问题] 关闭于 2020-05-25 18:41

环境:
win 7
unity 2019.3.1
API core.net 4.x

串口发送的数据格式: FC 02 00 00 如此循环

我遇到的问题: 只能接收到串口数据的字节长度 252, 当然我也没法确认这个是不是串口数据的长度还是什么的其他数据, 不过根据代码的推断应该是数据长度, 即便 我将数据转换成 int 类型, 还是 252 而不是我所需要的数据

我的代码 DeBugSerial.cs

-----------------------------------------------------------------------------------------------------------

public class DeBugSerial : MonoBehaviour {
private SerialPort serialPort;
private Thread readPortData;

public int[] SpeedValueArr;
int ClientCount = 2;

public List<byte> listReceive = new List<byte>();

private void Start() {
    SpeedValueArr = new int[ClientCount];
    try {
        serialPort = new SerialPort("COM9", 115200);
        serialPort.ReadTimeout = 500;
        if (!serialPort.IsOpen) {
            serialPort.Open();
        }

        readPortData = new Thread(new ThreadStart(readData));
        readPortData.IsBackground = true;
        readPortData.Start();
    } catch (Exception) {
        throw;
    }
}


/// <summary>
/// 读取数据
/// </summary>
private void readData() {
    try {
        while (serialPort != null && serialPort.IsOpen) {
            byte addr = Convert.ToByte(serialPort.ReadByte());
            serialPort.DiscardInBuffer();
            listReceive.Add(addr);
            ParseReceive();
        }
    } catch (Exception) {
        throw;
    }
}

/// <summary>
/// 打印数据
/// </summary>
void PrintData() {
    string str = string.Empty;
    for (int i = 0; i < listReceive.Count; i++) {
        str += listReceive[i].ToString("X2");     //这里只会得到数据  FC
    }
}

private void ParseReceive() {
    if (listReceive.Count < ClientCount + 2) {
        return;
    }
    for (int i = 0; i < ClientCount; i++) {
        SpeedValueArr[i] = listReceive[listReceive.Count - 1 - i];  //这里只会得到数据 252
    }
    listReceive.RemoveRange(0, ClientCount + 2);
}

}

-----------------------------------------------------------------------------------------------------------

在外部调用数据的时候, 是调用 SpeedValueArr 数组中的数据, 但是只会得到 252
而正确是获取的数据应该是 FC 02 00 00 中后面的两个数据, 所以,我到底是哪一步出了问题? 这个串口是直接返回十进制的数据的, 所以不需要进行位运算, 直接截取就行
我的另一个朋友用 2018.3.8 然后 用的 .net 3.5 + .net 2.0 的话, 是可以正常显示数据的, 但是为什么我的 4.x 就不行, 请各位高手给指个方向

苍之弦的主页 苍之弦 | 菜鸟二级 | 园豆:209
提问于:2020-05-14 16:28
< >
分享
所有回答(1)
1

修改 .NET 版本即可

苍之弦 | 园豆:209 (菜鸟二级) | 2020-05-25 18:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册