首页 > 解决方案 > 始终打印使用 Zigbee 阅读的最后一条消息

问题描述

我正在使用带有 Zigbee 的 Arduino 从传感器发送数据,并使用带有另一个 Zigbee 的 Raspberry Pi 来读取 10 个字节的数据,其中包含一个头部和一个停止。我在 Windows 10 IoT 上,我使用 VS 2019 进行编码。我的问题是我的 RPI 读取数据但越来越晚,所以我不再实时。我知道问题来自迫使我阅读每条消息的缓冲区,我愿意改变它。我只想读取缓冲区中的最后一条消息,但我不知道该怎么做。我尝试读取的速度比发送数据的速度快,但出错了,我还搜索了如何清空缓冲区,但没有找到。谢谢你的帮助,罗曼。

private async Task<ZigBeeCommResult> Read()
    {
        var retvalue = new ZigBeeCommResult();
        try
        {
            
            _dataReader = new DataReader(_zbCoordinator.InputStream);
            
            var numBytesRecvd = await _dataReader.LoadAsync(10);
            byte[] data = new byte[10];
            retvalue.TextResult = "";
            Debug.WriteLine(_dataReader.UnconsumedBufferLength);
            while (_dataReader.UnconsumedBufferLength > 0)
            {
                for (uint j = 0; j < 10; j++)
                {
                    data[j] = _dataReader.ReadByte();
                    //Debug.WriteLine(data[j]);
                    retvalue.TextResult += data[j];

                }
            }
            txtHeader.Text = retvalue.TextResult;


        }
        catch (Exception ex)
        {
            retvalue.IsSuccessful = false;
            retvalue.TextResult = ex.Message;
        }
        finally
        {
            if (_dataReader != null)
            {
                _dataReader.DetachStream();
                _dataReader = null;
            }
        }
        return retvalue;
    }

public void DispatcherTimerReaderSetup()
    {
        // configure dispatcher
        _dispatcherTimerReader = new DispatcherTimer();
        _dispatcherTimerReader.Tick += DispatcherTimerReader_Tick;
        _dispatcherTimerReader.Interval = new TimeSpan(0, 0, 0, 0, 500);
        _dispatcherTimerReader.Start();
    }

    public void DispatcherTimerReader_Tick(object sender, object e)
    {

        Read();
        
    }

标签: c#arduinobuffercommunicationzigbee

解决方案


推荐阅读