C# 按住/按下带有覆盆子皮GPIO的按钮
我想我的按钮做以下两件事C# 按住/按下带有覆盆子皮GPIO的按钮,c#,visual-studio,button,raspberry-pi,gpio,C#,Visual Studio,Button,Raspberry Pi,Gpio,我想我的按钮做以下两件事 无论何时按下按钮,都要做些什么 每当按钮被按住一定时间(2秒)时,请执行某些操作 我正在使用的当前代码看起来有点像这样: //Comfirming a letter or sending the word. private void btnRightValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) { //if button is pressed it w
- 无论何时按下按钮,都要做些什么
- 每当按钮被按住一定时间(2秒)时,请执行某些操作
//Comfirming a letter or sending the word.
private void btnRightValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
//if button is pressed it will confirm a letter
if (e.Edge == GpioPinEdge.FallingEdge)
{
//code to confirm letter
ConfirmLetter();
//if(buttonHeldForAWhile)
//{
//Send message
//SendWord();
//}
}
}
但是我怎样才能检查按钮是保持2秒还是3秒呢?我找到了一种解决问题的方法,使用秒表测量按钮被按下的时间 在名称空间上方,我们需要添加此名称空间,以便使用Stopwatch类
using System.Diagnostics;
现在我们要通过以下方式申报秒表:
Stopwatch stopWatch;
当按下并按住按钮时,我的代码将通过下降沿
拾取该按钮。当它被按下,我也希望它创建一个新的秒表,并启动它
松开按钮时,将通过RisingEdge
进行检查。我停止计时器并获取两个事件之间的时间。然后我比较if语句中按下的时间,这样我就可以决定按下按钮该做什么。在本例中,请发送Word,或附加当前字符并预览它
//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();
}
}
}
如果有更好的方法来解决我的问题,请让我知道,但到目前为止,这个解决方案对我有效
我需要这个,因为我是在一个树莓Pi项目与莫尔斯电码通过按钮输入工作。然后,该输入必须显示在LCD屏幕上。如果用户对自己的输入感到满意,他可以按住右键2秒将其发送给其他用户。您不能检查
GpioPinValue.Low
是否为真,并检查与系统时钟的对比情况吗?顺便说一句,如果有人感兴趣,这里是gpio命名空间的MS参考:“我想让我的按钮做……”——您的说明不准确。大多数事件报告方案使用边缘检测而不是电平检测,因此它们报告开关闭合(例如按下按钮)和开关断开(例如松开按钮)。按钮按下后(不等待释放)是否会执行第一个“动作”那么两者都应该是“什么”吗“按下并按住按钮2秒后,可以执行哪些操作?如果按住按钮超过3秒,应怎么做?“重复这个动作吗?”锯末,我觉得他的问题很清楚。若按钮保持2秒钟,那个么做一些事情,比如他的代码注释状态。我相信gpio有一个液位检测器,就像我提到的。按下按钮就是按住并释放(可以说很快),按住按钮就是在释放之前按住按钮2秒钟。我想为每个“事件”提供两个单独的函数。