我目前正在开发一个使用c#制作覆盆子pi机器人汽车的项目。我完全不了解c#,所以这是我学习它的方式。
汽车使用L298N来控制电机,所以我需要弄清楚如何让pi从一个引脚输出高电平,从另一个引脚输出低电平,然后我就可以找出如何控制它。
但重点是,我写了一些代码,希望它能激活其中一个电机,但它似乎并没有。我希望能够更好地理解c#和GPIO引脚的人能够指出错误。
谢谢,Callum
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Devices.Gpio;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace App4
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public void GPIO()
{
GpioController gpio = GpioController.GetDefault();
if (gpio == null)
return;
using (GpioPin pin1 = gpio.OpenPin(5))
{
pin1.Write(GpioPinValue.High);
pin1.SetDriveMode(GpioPinDriveMode.Output);
}
using (GpioPin pin2 = gpio.OpenPin(6))
{
pin2.Write(GpioPinValue.Low);
pin2.SetDriveMode(GpioPinDriveMode.Output);
}
}
}
}
答案 0 :(得分:0)
如果您不完全确定GPIO引脚是否正确,可以使用此GPIO引脚图:https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
如您所见,GPIO引脚5位于第29位。
如果您确定自己拥有正确的密码,那么我的代码就不会出现问题。我能想到的唯一问题是你正在使用using语句:
using (GpioPin pin1 = gpio.OpenPin(5))
{
pin1.Write(GpioPinValue.High);
pin1.SetDriveMode(GpioPinDriveMode.Output);
}
这样做是打开引脚,写入引脚,然后立即关闭引脚,这可能导致在引脚关闭之前写入没有完成。
不幸的是,我在文档https://docs.microsoft.com/en-us/uwp/api/windows.devices.gpio.gpiopin中找不到关于写入过程是否立即执行的任何内容。
您可以尝试删除using语句并稍后手动调用pin1.Dispose()(例如,当您即将关闭程序时)
在这种情况下,它看起来像这样:
GpioPin pin1 = gpio.OpenPin(5);
pin1.Write(GpioPinValue.High);
pin1.SetDriveMode(GpioPinDriveMode.Output);
...
pin1.Dispose();