ボタンが押されている時間を測定するストップウォッチを使用して問題を解決する方法を見つけました。
上記の名前空間の上に、Stopwatchクラスを使用するためにこれを追加する必要があります。ボタンを押すと、私のコードはFallingEdge
でそれをピックアップします保持されている
Stopwatch stopWatch;
:
using System.Diagnostics;
は、今、私たちはでストップウォッチを宣言したいです。それが押されたら、私は新しいストップウォッチを作成してそれを開始したい。
ボタンが離されたときは、RisingEdge
によってチェックされます。私はタイマーを停止し、2つのイベントの間の時間を取得します。 if文で押された時間を比較して、buttonpressで何をするかを決めることができます。この場合、SendWord、または現在のcharを追加してプレビューします。
//Comfirming the chosen letter.
private void btnRightValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
if (e.Edge == GpioPinEdge.FallingEdge)
{
stopWatch = new Stopwatch();
stopWatch.Start();
}
if (e.Edge == GpioPinEdge.RisingEdge)
{
stopWatch.Stop();
long duration = stopWatch.ElapsedMilliseconds;
if (duration > 2000)
{
SendWord();
}
else
{
//Add the current character to the word
_currentWordSB.Append(Convert.ToString(_currentChar));
// //Reset currentChar aswell
_currentChar = ' ';
// //The user confirmed the morse sequence and wants to start a new one, so we reset it.
_morseCode.Clear();
// //Preview the word
PreviewLetter();
}
}
}
私の問題に取り組むための任意のより良い方法があれば、私に知らせてこれまでのところ、このソリューションは、私のために動作してください。
ボタンを使用してモールスコードを入力したRaspberry Piプロジェクトで作業していたときには、これが必要でした。その入力はLCDスクリーン上に表示されなければならなかった。ユーザーが入力に満足していれば、右ボタンを2秒間押して他のユーザーに送信することができます。
'GpioPinValue.Low'が真であるかどうかを確認して、システムクロックと比較して確認できませんか? –
ところで、興味のある人のためにgpio名前空間のMSリファレンスがあります:https://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.gpio.aspx –
*「私私のボタンがするのが好きです... "* - あなたの仕様は不正確です。ほとんどのイベント報告スキームでは、レベル検出ではなくエッジ検出が使用されるため、スイッチの閉鎖(ボタンの押下など)とスイッチのオープン(ボタンの解放など)の両方が報告されます。最初の「何か」*アクションは、ボタンが押されるとすぐに(リリースを待たずに)実行されますか?ボタンを押したときに「何か」のアクションが実行され、***が2秒間保持されるべきである。ボタンを3秒以上押し続けるとどうなるでしょうか?アクションを繰り返しますか? – sawdust