Fork me on GitHub

思路

按钮按下输出为低电平,按钮抬起时为高电平。

萌叔希望达到的效果是按一下按钮,小灯亮起,再按一次,小灯熄灭
需要捕获电位从 低电位 -> 高电位 的这个变化

代码

#define legPinIn 10
#define legPinOut 5

bool isLightOn = false;
int preMode = HIGH;
int currMode = HIGH;

void setup() {
  Serial.begin(9600);
  pinMode(legPinIn, INPUT);
  pinMode(legPinOut, OUTPUT);
}

void loop() {
  isLightOn = getLightState();

  if (isLightOn) {
    digitalWrite(legPinOut, HIGH);
  } else {
    digitalWrite(legPinOut, LOW);
  }

  delay(100);
}

bool getLightState() {
  if (digitalRead(legPinIn) != currMode) {
    preMode = currMode;
    currMode = digitalRead(legPinIn);
    if (preMode == LOW && currMode == HIGH) {
      isLightOn = !isLightOn;
      Serial.print("isLightOn: ");
      Serial.println(isLightOn);
    }
  }

  return isLightOn;
}

演示视频

B站

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注