使用 Windows 10 IoT Core 通过 I2C 向 PIC16F1503 发送命令
Sending commands via I2C to PIC16F1503 using Windows 10 IoT Core
场景
我想使用 C# 与 PIC16F1503 控制器进行通信,而 运行 作为 Raspberry Pi 上使用 Windows 10 IoT Core 的 UWP 应用程序。
我的消息来源似乎使用 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 });
}
完整来源
是否有人知道进一步的教程或新的 "entry" 要点以与 C# 和此 mc 相处?谢谢!
您通过 I2C 从 Raspberry Pi 向 PIC16F1503 发送了几个字节,我通过调试您的代码得到了它们:1, 1, 1, 1-43-7-0-0, 1.
但它们似乎并不完全符合您实际要发送的内容,因为我在您的 WriteByte 函数中发现了一个问题,例如:
(您正在尝试更改 value-type 变量: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 速度是否匹配。以及硬件管脚连接是否正确。
场景
我想使用 C# 与 PIC16F1503 控制器进行通信,而 运行 作为 Raspberry Pi 上使用 Windows 10 IoT Core 的 UWP 应用程序。
我的消息来源似乎使用 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 });
}
完整来源
是否有人知道进一步的教程或新的 "entry" 要点以与 C# 和此 mc 相处?谢谢!
您通过 I2C 从 Raspberry Pi 向 PIC16F1503 发送了几个字节,我通过调试您的代码得到了它们:1, 1, 1, 1-43-7-0-0, 1.
但它们似乎并不完全符合您实际要发送的内容,因为我在您的 WriteByte 函数中发现了一个问题,例如:
(您正在尝试更改 value-type 变量: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 速度是否匹配。以及硬件管脚连接是否正确。