【发布时间】:2018-03-10 01:56:23
【问题描述】:
晚上好,
我正在对我的家庭自动化系统开始进行一些故障排除。我正在尝试使用 C# 中的 Raspberry PI 3 和 Windows IOT 切换继电器。我一直在玩代码,我可以看到继电器切换一次或两次,但随后应用程序崩溃了。我是一个 IOT 菜鸟,所以这段代码有问题吗? (变量名在别处定义,我下面的奇怪变量名用于我的 WIP 项目......我更喜欢用英文进行故障排除)......
private void BtnTempFan_Click(object sender, RoutedEventArgs e)
{
if (BtnTempFan.IsChecked == true)
{
TogglePin(TempFan, TempFan_PIN, BtnTempFan, GpioPinValue.High);
}
else
{
TempFan.Dispose();
}
}
private void TogglePin(GpioPin PinName, int PinNumber, ToggleButton Name, GpioPinValue value)
{
int pinnumber = PinNumber;
GpioPinValue pinvalue;
var gpio = GpioController.GetDefault();
PinName = gpio.OpenPin(pinnumber);
if (gpio == null)
{
PinName = null;
LblError.Text = "We can't find the controller on the device" + PinName;
LblError.Visibility = Visibility.Visible;
return;
}
if (PinName == null)
{
LblError.Text = "We can't find the pin on the device. Pin number " + PinNumber + "does not exist";
LblError.Visibility = Visibility.Visible;
return;
}
if (Name.IsChecked == true)
{
pinvalue = value;
PinName.Write(pinvalue);
PinName.SetDriveMode(GpioPinDriveMode.Output);
}
【问题讨论】:
-
我看到的两件事看起来不正确,但我不能确定这是问题所在。您在切换按钮中调用
TempFan.Dispose();这意味着当您取消切换按钮时,它将尝试使用 TempFan(但它已经被处理掉了。)另一件事是您正在调用var gpio = GpioController.GetDefault();,然后立即尝试使用PinName = gpio.OpenPin(pinnumber);分配引脚。然后,您正在检查gpio是否为空。赋值后立即检查null,否则赋值PinName会报错。
标签: c# raspberry-pi3 windows-iot-core-10