使用Windows 10 IoT核心版通过I2C向PIC16F1503发送命令

时间:2019-05-25 15:13:04

标签: c# i2c windows-iot-core-10

场景

我想在使用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 });
}

完整来源

GitHub Gist

有人知道进一步的教程或新的“入门”要点与C#和此mc相处吗?谢谢!

1 个答案:

答案 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速度是否匹配。硬件针脚连接正确与否。