繁体   English   中英

Raspberry pi c上的GPIO#

[英]GPIO on Raspberry pi c#

我目前正在开发一个使用c#制作覆盆子pi机器人汽车的项目。 我完全不了解c#,所以这是我学习它的方式。

汽车使用L298N控制电机,所以我需要弄清楚如何让pi从一个引脚输出高电平,从另一个引脚输出低电平,然后我就可以找出如何控制它。

但重点是,我写了一些代码,希望它能激活其中一个电机,但似乎并没有。 我希望能够更好地理解c#和GPIO引脚的人能够指出错误。

谢谢,卡勒姆

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);
            }
        }
    }
}

如果你不完全确定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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM