我正在为树莓派和Teensy3.6Arduino开发一个I2C解决方案。Pi将通过I2C向Arduino发送NTP。我已经做了几个星期的研究,并尝试测试下面的代码,并收到几个错误。
public sealed class StartupTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
while(true)
{
Wait(5000);
try
{
await I2C();
}
catch (Exception ex)
{
// eats fast inputs
}
}
}
private async void Wait(int millis)
{
await Task.Delay(millis);
}
private async Task I2C()
{
var settings = new I2cConnectionSettings(1);
settings.BusSpeed = I2cBusSpeed.FastMode;
var controller = await I2cController.GetDefaultAsync();
using (I2cDevice device = controller.GetDevice(settings))
{
byte[] writeBuf = { 0x01, 0x02, 0x03, 0x04 };
device.Write(writeBuf);
}
}
}
使用调试控制台,我发现I2C方法永远不会遍历Using语句。
例外情况:
引发异常: i2cTestIOT.winmd WinRT信息中的'System.Runtime.InteropServices.COMException‘:传输了意外的字节数。预期:‘。实际:‘。引发异常: System.Private.CoreLib.ni.dll WinRT信息中的'System.Runtime.InteropServices.COMException‘:传输了意外的字节数。预期:‘。实际:‘。
发布于 2019-06-13 10:59:38
我不能用你的代码用Raspberry pi和Arduino Uno重现这个错误。(如果它是一个完全可重现的代码)。所以
确保1
是您的Teensy 3.6Arduino的正确I2C地址,并检查SDA和SCL连接是否正确。请参阅Windows IoT Core pin mappings。
如果希望background application始终运行,请添加deferral = taskInstance.GetDeferral();
。否则,当Run方法结束时,后台应用程序也会结束。
private BackgroundTaskDeferral deferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
deferral = taskInstance.GetDeferral();
//
// TODO: Insert code to start one or more asynchronous methods
//
}
先尝试StandardMode速度,然后再尝试FastMode速度。
https://stackoverflow.com/questions/56569417
复制相似问题