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