Uwp 无法在Windows 10 Iot Core中打开(GPIO)引脚6
我想让我的彩虹帽的红色发光二极管发光。这要求我向车身控制模块6的针脚发送一个高电平信号 (短端)来源Uwp 无法在Windows 10 Iot Core中打开(GPIO)引脚6,uwp,raspberry-pi,gpio,windows-10-iot-core,Uwp,Raspberry Pi,Gpio,Windows 10 Iot Core,我想让我的彩虹帽的红色发光二极管发光。这要求我向车身控制模块6的针脚发送一个高电平信号 (短端)来源 /// <summary> /// Private singelton instance. /// </summary> private static RainbowHAT instance; /// <summary> /// Default instance of RainbowHAT. /// &
/// <summary>
/// Private singelton instance.
/// </summary>
private static RainbowHAT instance;
/// <summary>
/// Default instance of RainbowHAT.
/// </summary>
public static RainbowHAT Default
{
get
{
if (instance == null)
{
instance = new RainbowHAT();
}
return instance;
}
}
private RainbowHAT()
{
gpioController = GpioController.GetDefault();
// Ensure that we have a valid gpio connection
if (gpioController == null)
{
throw new OperationCanceledException("Operation canceled due missing GPIO controller");
}
Init();
}
public void PerformAction(RainbowHATAction action)
{
switch(action)
{
case RainbowHATAction.TurnOnRed:
redPin.Write(GpioPinValue.High);
break;
case RainbowHATAction.TurnOffRed:
redPin.Write(GpioPinValue.Low);
break;
case RainbowHATAction.LEDsOn:
apa102.TurnOn();
break;
case RainbowHATAction.LEDsOff:
apa102.TurnOff();
break;
default:
break;
}
}
类常数:
private static readonly int GPIO_NUMBER_RED = 22;
在构造函数中调用:
var gpioController = GpioController.GetDefault();
redPin = gpioController.OpenPin(GPIO_NUMBER_RED);
redPin.Write(GpioPinValue.High);
redPin.SetDriveMode(GpioPinDriveMode.Output);
我尝试了我的类全局常数的值6(BCM)、31(管脚编号)和22(接线管脚编号)GPIO\u number\u RED
,但我总是得到错误:
WinRT information: Pin ' is not available. It is reserved by the system or in use for another function.
引脚布局
完整来源
/// <summary>
/// Private singelton instance.
/// </summary>
private static RainbowHAT instance;
/// <summary>
/// Default instance of RainbowHAT.
/// </summary>
public static RainbowHAT Default
{
get
{
if (instance == null)
{
instance = new RainbowHAT();
}
return instance;
}
}
private RainbowHAT()
{
gpioController = GpioController.GetDefault();
// Ensure that we have a valid gpio connection
if (gpioController == null)
{
throw new OperationCanceledException("Operation canceled due missing GPIO controller");
}
Init();
}
public void PerformAction(RainbowHATAction action)
{
switch(action)
{
case RainbowHATAction.TurnOnRed:
redPin.Write(GpioPinValue.High);
break;
case RainbowHATAction.TurnOffRed:
redPin.Write(GpioPinValue.Low);
break;
case RainbowHATAction.LEDsOn:
apa102.TurnOn();
break;
case RainbowHATAction.LEDsOff:
apa102.TurnOff();
break;
default:
break;
}
}
套餐信息
<Capabilities>
<Capability Name="internetClient" />
<DeviceCapability Name="lowLevel"/>
</Capabilities>
我还重新启动了Pi以“重置”可能是访问此Pin的其他应用程序,但没有成功。解决方案 如果不在构造函数中调用
gpioController
,而是在Init之后调用另一个方法,则一切正常
现在的问题是,为什么不可能在init中实现呢?解决方案 如果不在构造函数中调用
gpioController
,而是在Init之后调用另一个方法,则一切正常
现在的问题是,为什么不可能在init中执行呢?我已经下载了repo并查看了代码。我不确定为什么需要在MainPageViewModel的构造函数中添加Init方法。但不建议在模型的构造函数方法中添加singleton实例,因为该模型用于绑定到视图以显示数据。重用GPIO pin资源时,应在另一个页面中释放并处置它。此外,当您不需要使用GpioPin时,应该手动处理GpioPin。您可以尝试在RainbowHAT的构造函数中移动Init方法,如下面的代码所示 RainbowHAT.cs(更新)
我已经下载了回购协议并查看了代码。我不确定为什么需要在MainPageViewModel的构造函数中添加Init方法。但不建议在模型的构造函数方法中添加singleton实例,因为该模型用于绑定到视图以显示数据。重用GPIO pin资源时,应在另一个页面中释放并处置它。此外,当您不需要使用GpioPin时,应该手动处理GpioPin。您可以尝试在RainbowHAT的构造函数中移动Init方法,如下面的代码所示 RainbowHAT.cs(更新) 解决方案#2 在@michaelxu msft指出我没有使用
Singelton
模式之后,我删除了它,瞧,现在我可以从构造函数中调用Init了。我必须研究原因。解决方案#2
在@michaelxu msft指出我没有使用
Singelton
模式之后,我删除了它,瞧,现在我可以从构造函数中调用Init了。我必须研究一下原因。GPIO\U NUMBER\U RED是局部变量吗?如果是这样的话,我们可以看到任何设置“GPIO_NUMBER_RED”值的行@Jamesm,这是一个类常量。我更新了我的问题。GPIO_NUMBER_RED是局部变量吗?如果是这样的话,我们可以看到任何设置“GPIO_NUMBER_RED”值的行@Jamesm,这是一个类常量。我更新了我的问题。你提到这个了吗?gpioController
在页面的构造函数中初始化。所以我认为你的问题与此无关。你能提供更多的代码吗?如果可能,您可以提供该项目。@MichaelXu MSFT是的,我提供了。我的问题的意思是“我可能做错了”。这是源类。请查看构造函数下面的Init()
方法。你提到过这个吗?gpioController
在页面的构造函数中初始化。所以我认为你的问题与此无关。你能提供更多的代码吗?如果可能,您可以提供该项目。@MichaelXu MSFT是的,我提供了。我的问题的意思是“我可能做错了”。这是源类。请查看构造函数下面的Init()
方法。这是我第一次尝试。但是不,我将获得一个WinRT信息:Pin'不可用。它由系统保留或用于其他功能。
异常。你的意思是,我不应该使用Singelton模式吗?@Tobonaut,Singelton模式可以用于彩虹帽课程。但在您的代码中,它似乎不适用于GpioController。我对它进行了修改,效果很好。这是我有史以来的第一个方法。但是不,我将获得一个WinRT信息:Pin'不可用。它由系统保留或用于其他功能。
异常。你的意思是,我不应该使用Singelton模式吗?@Tobonaut,Singelton模式可以用于彩虹帽课程。但在您的代码中,它似乎不适用于GpioController。我已经修改过了,效果很好。