2017-02-21 228 views
1

我目前正在使用c#製作一個覆盆子pi機器人車的東西。我完全沒有C#的知識,所以這是我學習它的方式。GPIO在樹莓派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); 
      } 
     } 
    } 
} 
+1

我對C#沒有任何關於GPIO的知識,但是您可能想在寫入之前先調用SetDriveMode輸出,對嗎? – MrZander

回答

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