2017-02-21 12 views
1

В настоящее время я работаю над проектом, чтобы сделать мазут pi с помощью робота с помощью C#. У меня нет абсолютно никаких знаний о C#, так что это мой способ обучения.GPIO on Raspberry 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); 
      } 
     } 
    } 
} 
+1

Я не знаю GPIO с C#, но вы, вероятно, хотите вызвать 'SetDriveMode' для вывода, прежде чем писать на него, правильно? – MrZander

ответ

0

Если вы не совсем уверены, что контактный GPIO является правильным, вы можете использовать этот GPIO пин карта: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/

Как вы можете видеть GPIO штифт 5 находится в позиция 29.

Если вы уверены, что у вас правильный контакт, то я не вижу многого с вашим кодом. Единственная проблема, которую я могу думать о том, что вы используете, используя оператор:

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 о том, выполняется ли процесс записи немедленно или нет.

Вы можете попытаться удалить с помощью оператора и вызывать pin1.Dispose() вручную позже (когда вы собираетесь закрыть программу, например)

в этом случае она будет выглядеть следующим образом:

GpioPin pin1 = gpio.OpenPin(5); 
pin1.Write(GpioPinValue.High); 
pin1.SetDriveMode(GpioPinDriveMode.Output); 

... 

pin1.Dispose();