Win10 IoT 8 GPIO輸入輸出


微軟官方的例子Blinky能夠控制GPIO的輸出並在界面中顯示出來,通過我自己的改造,將這個工程從GPIO輸入來控制輸入LED的狀態並且在界面中顯示出來,而輸入是通過GPIO的事件觸發來完成,並立即刷新界面顯示。

在winform中只要用Invoke即可實現跨線程訪問UI,但是在這個UWP工程里的界面元素沒有Invoke方法,通過葉帆老師的幫助采用C#5.0的新特性async await異步方法解決了跨線程訪問UI的功能。

部分代碼如下:

    public sealed partial class MainPage : Page
    {
        private const int LED_PIN = 5;
        private const int SWITCH_PIN = 6;
        private GpioPin pinled;
        private GpioPin pinswitch;
        private SolidColorBrush redBrush = new SolidColorBrush(Windows.UI.Colors.Red);
        private SolidColorBrush grayBrush = new SolidColorBrush(Windows.UI.Colors.LightGray);

        public MainPage()
        {
            this.InitializeComponent();
            InitGPIO();
        }

        private void InitGPIO()
        {
            var gpio = GpioController.GetDefault();

            // Show an error if there is no GPIO controller
            if (gpio == null)
            {
                pinled = null;
                pinswitch = null;
                GpioStatus.Text = "There is no GPIO controller on this device.";
                return;
            }
            pinswitch = gpio.OpenPin(SWITCH_PIN);
            pinswitch.DebounceTimeout = new TimeSpan(0, 0, 0, 0, 50);//消抖時間
            pinswitch.SetDriveMode(GpioPinDriveMode.Input);
            pinled = gpio.OpenPin(LED_PIN);
            pinled.SetDriveMode(GpioPinDriveMode.Output);
            pinled.Write(pinswitch.Read());
            pinswitch.ValueChanged += Pinswitch_ValueChanged;

            GpioStatus.Text = "GPIO pin initialized correctly.";
        }

        private async void Pinswitch_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
        {
            GpioPinValue pinvalue = pinswitch.Read();
            pinled.Write(pinvalue);

            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                switch (pinvalue)
                {
                    case GpioPinValue.Low:
                        LED.Fill = redBrush;
                        break;
                    case GpioPinValue.High:
                        LED.Fill = grayBrush;
                        break;
                    default:
                        break;
                }
            });
        }
    }

  

 

完整程序包連接如下:

 http://download.csdn.net/detail/wangji666666/9411014

注意:要將項目屬性頁“Debug”下的Remote machine中內容改成自己的win10iot設備的名稱或者是IP


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM