const int buttpin = 4;
const int ledpin = 10;
bool ledon = false;
void setup() {
// put your setup code here, to run once:
pinMode(buttpin, INPUT_PULLUP);//输入模式,内部上拉
pinMode(ledpin, OUTPUT);
digitalWrite(ledpin, LOW);//关灯
//Serial.begin(9600);
}
int Keydown()
{ //按钮按下只动作一次的检测函数
static int keyflag = 0;
if ((keyflag == 0) && digitalRead(buttpin) == LOW)//按钮负逻辑,按钮被按下
{
delay(100);//延时除颤
if (digitalRead(buttpin) == LOW)
{
//Serial.println("Down");
keyflag = 1;//置1,避免持续按下按键时再次进入此函数体。
return 1;
}
}
if (digitalRead(buttpin) == HIGH)//按钮断开
{
//Serial.println("UP");
keyflag = 0;
}
return 0;
}
void loop() {
// put your main code here, to run repeatedly:
if (Keydown())
{
ledon=!ledon;//状态取反
//呼吸效果用循环次数和延时控制
if (ledon)
{//真,开灯
for (int i = 0; i < 255; i += 5)
{
analogWrite(ledpin, i);//PWM输出
delay(50);
}
}
else
{//假,关灯
for (int i = 255; i >= 0; i -= 5)
{
analogWrite(ledpin, i);//PWM输出
delay(50);
}
}
}
}