场景
我想在使用Windows 10 IoT核心版的Raspberry Pi上作为UWP应用运行时,使用C#与PIC16F1503控制器进行通信。
似乎我的消息来源使用I2cDevice.FromIdAsync(...)
检测到了控制器。但是,如果我尝试通过以下方式发送“ Servo1”命令0x01
:
pic16f1503.Write(new byte[] { COMMANDO_SERVO_1 });
pic16f1503.Write(data.ToArray());
什么都没发生。我(希望)通过以下方式启用了“ Servo1”:
private void WriteConfiguration()
{
// Create configuration mask.
byte config = 0;
// Enable servo 1
config |= 1;
// Enable servo 2
config |= 0 << 1;
// Enable lights
config |= 0 << 2;
// Light mode
config |= 0 << 3;
// Light on
config |= 0 << 4;
// Write configuration to device.
pic16f1503.Write(new byte[] { COMMAND_CONFIG});
pic16f1503.Write(new byte[] { config });
}
完整来源
有人知道进一步的教程或新的“入门”要点与C#和此mc相处吗?谢谢!
答案 0 :(得分:2)
您通过I2C从Raspberry Pi向PIC16F1503发送了几个字节,我通过调试代码来获得它们:1,1,1,1-43-7-0-0,1。
但是它们似乎并不完全符合您要发送的内容,因为我在您的WriteByte函数中发现了一个问题,例如:
(您正在尝试更改值类型变量:byte[] data
。请参阅“ Passing Parameters (C# Programming Guide)”)
private void WriteByte(byte command, byte[] data)
{
data.ToList().Insert(0, command);
data.ToArray();
pic16f1503.Write(data);
}
我将上面的功能编辑为此:
private void WriteByte(byte command, byte[] data)
{
var sendData = data.ToList();
sendData.Insert(0, command);
pic16f1503.Write(sendData.ToArray());
}
然后发送数据:0-1、0-1、1、1-43-7-0-0、0-1
打印int
数组时没什么问题。
编辑此行:Debug.WriteLine($"PIC16F1503 - SetDegrees to {ms} start.\nData: {data}");
为此,以打印正确的格式数据:
Debug.WriteLine($"PIC16F1503 - SetDegrees to {ms} start.\n");
Debug.WriteLine("Data: ");
foreach (var element in data)
{
Debug.WriteLine(element);
}
Debug.WriteLine("\n");
然后,您将正确的数据发送到PIC16F1503。如果仍然无法正常工作,请检查两个设备的I2C速度是否匹配。硬件针脚连接正确与否。