有没有人能帮我理解一下如何用ABElecrtonics_Win10IOT_Libraries的C# UWP中的IoPiPlus扩展板来点亮led和读取按钮的状态?我找到的所有教程都是针对python的。谢谢。
发布于 2018-07-30 16:13:54
The IO Pi Plus是一款32通道数字扩展板,专为覆盆子Pi设计。它可以通过树莓派I2C端口进行控制。GPIO #2,执行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发布于 2018-07-30 20:56:38
同时,我设法用两个按钮控制了软件和硬件中的两个LED。下面我将放入代码,它可能会对其他人有用
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>https://stackoverflow.com/questions/51579763
复制相似问题