ABElecrtonics_Win10IOT_Libraries в C# UWP?

Может кто-нибудь помочь мне понять, как я мог зажечь светодиод и прочитать состояние кнопки, используя плату расширения IoPiPlus в C# UWP с ABElecrtonics_Win10IOT_Libraries? Все учебники, которые я нашел, предназначены для Python. Спасибо.

2 ответа

Между тем мне удалось управлять двумя светодиодами как в программном, так и в аппаратном обеспечении с помощью двух кнопок. Ниже я приведу код, вероятно, он будет полезен для кого-то еще

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using System.Threading;
using ABElectronics_Win10IOT_Libraries;
using Windows.UI.Popups;

namespace IoPiPlust_start_led
{
    public sealed partial class MainPage : Page
    {
        int x = 0;
        int y = 0;
        public IOPi bus1 = new IOPi(0x20);
        public IOPi bus2 = new IOPi(0x21);
        int TIME_INTERVAL_IN_MILLISECONDS = 100;
        Timer _timer1;

        public MainPage()
        {
            this.InitializeComponent();
            conect();
            _timer1 = new Timer(Timer1_Tick, null, TIME_INTERVAL_IN_MILLISECONDS, Timeout.Infinite);
        }

        public async void conect()
        {
            bus1.Connected += Bus1_Connected;
            bus2.Connected += Bus2_Connected;
            await bus1.Connect();
            await bus2.Connect();
            bus2.SetPortDirection(0, 0x00);
            bus1.SetPortDirection(0, 0xFF);
            bus1.SetPortPullups(0, 0xFF);
            bus1.InvertPort(0, 0xFF);
        }

        private void Bus2_Connected(object sender, EventArgs e)
        {
            bus2.SetPortDirection(0, 0x00);
        }

        private void Bus1_Connected(object sender, EventArgs e)
        {
            ReadBus1();
            _timer1.Change(TIME_INTERVAL_IN_MILLISECONDS, Timeout.Infinite);
        }

        private void Timer1_Tick(Object state)
        {
            if (bus1.IsConnected)
            {
                ReadBus1();
                if (bus2.IsConnected)
                {
                    if (bus1.ReadPin(1))
                    { bus2.WritePin(1, true); }
                    if (bus1.ReadPin(2))
                    { bus2.WritePin(2, true); }
                    if (!bus1.ReadPin(1))
                    { bus2.WritePin(1, false); }
                    if (!bus1.ReadPin(2))
                    { bus2.WritePin(2, false); }
                }
                _timer1.Change(TIME_INTERVAL_IN_MILLISECONDS, Timeout.Infinite);
            }
        }

        public async void ReadBus1()
        {
            if (bus1.IsConnected)
            {
                try
                { Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        bus1_pin1_chk.IsChecked = bus1.ReadPin(1);
                        bus1_pin2_chk.IsChecked = bus1.ReadPin(2);
                    }
                    );
                }
                catch (Exception e)
                {
                    throw e;
                }   
            }
        }

        private void red_led_btn_Click(object sender, RoutedEventArgs e)
        {

            if(x%2==0)
            { bus2.WritePin(2, true); }
            else
            { bus2.WritePin(2, false); }
            x++;
        }

        private void green_led_btn_Click(object sender, RoutedEventArgs e)
        {

            if (y % 2 == 0)
            {  bus2.WritePin(1, true); }
            else
            { bus2.WritePin(1, false); }
            y++;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            bus2.WritePin(1, false);
            bus2.WritePin(2, false);
            x = 0;
            y = 0;
        }
    }
}

MainPage.xaml:

<Page
    x:Class="IoPiPlust_start_led.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:IoPiPlust_start_led"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button x:Name="red_led_btn" Content="Red" HorizontalAlignment="Left" Margin="170,277,0,0" VerticalAlignment="Top" Click="red_led_btn_Click"/>
        <Button x:Name="green_led_btn" Content="Green" HorizontalAlignment="Left" Margin="278,277,0,0" VerticalAlignment="Top" Click="green_led_btn_Click"/>
        <Button Content="Button" HorizontalAlignment="Left" Margin="240,364,0,0" VerticalAlignment="Top" Click="Button_Click"/>
        <CheckBox x:Name="bus1_pin1_chk" Content="bus1_pin1" HorizontalAlignment="Left" Margin="638,277,0,0" VerticalAlignment="Top"/>
        <CheckBox x:Name="bus1_pin2_chk" Content="bus1_pin2" HorizontalAlignment="Left" Margin="638,314,0,0" VerticalAlignment="Top"/>

    </Grid>
</Page>

IO Pi Plus - это 32-канальная цифровая плата расширения, разработанная для использования на Raspberry Pi. Им можно управлять через порт Raspberry Pi I2C. GPIO #2 и # 3 выполняют I2C. Вот Raspberry Pi 2 & 3 Pin Mappings.

Пожалуйста, обратитесь к AB Electronics UK Windows 10 IOT Библиотеки и демонстрации. Вы можете установить вывод включения для использования функций включения выхода, а также включения и отключения выхода.

ABElectronics_Win10IOT_Libraries.ServoPi servo = new ABElectronics_Win10IOT_Libraries.ServoPi(0x40);

servo.OutputEnablePin = 17; // set to GPIO pin 17 to control
servo.OutputEnable();       //set Gpio Low
servo.OutputDisable();      //set Gpio High
Другие вопросы по тегам