我从IoT开始我的冒险,并在我身后获得了一些闪烁的经验。但是现在我想做一些更先进的事情,所以我想我试着从遥控器中读取红外线信号。现在,一切都是基于rPi3。
所以我要说的是
let private _onPinValueChanged (gpioController: GpioController) =
new PinChangeEventHandler (
fun _ _ ->
Console.WriteLine DateTime.Now
Console.WriteLine (gpioController.Read GpioIrIn)) //pin number is 18
let StartIrRead (gpioController: GpioController) (cancellationToken: CancellationToken) =
let worker =
async {
Console.WriteLine $"Opening PIN {GpioIrIn}"
gpioController.OpenPin (GpioIrIn, PinMode.Input)
match gpioController.IsPinOpen GpioIrIn with
| true -> gpioController.RegisterCallbackForPinValueChangedEvent (GpioIrIn, PinEventTypes.Rising, _onPinValueChanged gpioController)
| false -> raise (Exception($"Problem with opening PIN {GpioIrIn}"))
}
Async.Start (worker, cancellationToken)它对某些物质起作用。事件是当我点上一个遥控器并按下任何按钮,但我知道我需要脉冲或一些值,但我得到的只是PinStatus (例如。很高)。那么,我如何注册和转换它,以便我可以把它发回呢?
发布于 2022-05-25 09:17:57
不幸的是,Iot.Device.Bindings中没有直接支持IR传感器的绑定。
所以我觉得你的开局很好。您正在收听从IR接收器生成的事件。然而,红外通信是一种数字通信,其中一个信号用几个字节的数据传输,类似于串行通信,这意味着当你按下一个按钮时,你会收到许多事件。对于每个事件,您需要存储新值(高值或低值)和时间戳。收集一组事件(用不同的超时值检查)之后,您需要从这些事件中计算一个位集。
这再次变得困难,因为远程编码的方式是不标准化的。这是张床单描述了一些常见的编码格式。您可能已经能够从您获得的数据集中为您的遥控器找到正确的编码格式(但请记住,您的定时测量将有一些错误)。
如果您认为没有得到合理的数据序列,则可能需要使用繁忙--在第一个事件之后等待(并轮询输入更改),因为触发事件的速度是有限制的。
https://stackoverflow.com/questions/72361165
复制相似问题