写在前面
如果要检测通断信号,通常会把引脚设置为 INPUT_PULLUP ,即上拉输入模式,避免输入引脚因 悬空 ,造成干扰。
一般来说,如果检测到输入信号,就执行一段代码;但是在实际应用中,如果直接以信号的通断作为触发信号,就会一直处于触发状态,在 loop() 中,代码就会跟随扫描周期,不断地重复执行;如果这样的话,代码的运行效果可能就不是我们所预期的;甚至会导致系统崩溃。
如果,我们只希望在触发的瞬间,代码只执行一次,这样就需要用到 上升沿 或者 下降沿 检测。
测试代码
int InPut = 27; //定义输入引脚
void setup()
{
//启用串口0
Serial.begin(115200);
//设置InPut引脚为上拉输入模式
pinMode(InPut, INPUT_PULLUP);
}
void loop()
{
//记录输入点状态
int buttonState = digitalRead(InPut);
//防抖动
delay(5);
//检测下降沿
if ( buttonState == HIGH && digitalRead(InPut) == LOW )
{
Serial.println("falling edge");
}
}
测试结果
如上,只有在按钮导通的瞬间,只打印一次 falling edge ,直到再次触发。