今回はイベントを使ってボタンの状態を検出するプログラムを消化します。
前回と同じ回路を使用します。
ハードウェア
・Freenove ESP32-S3-WROOM Board or Espressif ESP32-S3-DevKitC
・ブレッドボード
・タクトスイッチ
・ジャンパーワイヤ
配線
導入するパッケージ
・nanoFramework.System.Device.Gpio
プログラミング
・新規プロジェクトを作成します。プロジェクト名は「ESP32S3_Button_event」としました。
・コードを入力する前にパッケージは導入してください。
・コードは次のようになります。
Program.cs
using System;
using System.Diagnostics;
using System.Threading;
using System.Device.Gpio;
namespace ESP32S3_button_event
{
public class Program
{
private static GpioPin ledPin;
private static GpioPin buttonPin;
public static void Main()
{
GpioController controller = new GpioController();
ledPin = controller.OpenPin(2, PinMode.Output);
ledPin.Write(PinValue.Low);
buttonPin = controller.OpenPin(35, PinMode.InputPullDown);
buttonPin.ValueChanged += ButtonPin_ValueChanged;
Thread.Sleep(Timeout.Infinite);
}
private static void ButtonPin_ValueChanged(object sender, PinValueChangedEventArgs e)
{
Debug.WriteLine(buttonPin.Read().ToString());
if (e.ChangeType == PinEventTypes.Rising) //Pinの電圧が低い状態から高い状態に変化した時
{
ledPin.Write(PinValue.High);
}
else
{
ledPin.Write(PinValue.Low);
}
}
}
}
実行するとスイッチを押した時(この回路ではスイッチをオンにすることでPinに電圧がかかります。)にオンボードLEDが点灯します。
前回のプログラムではPinの状態を定期的に監視して電圧がかかっているときにLEDを点灯するようにしていました。
今回のプログラムではPinにかかる電圧が変化した時にイベントが発生し、そのイベントの状態によってLEDを制御するようにしています。