Contents ...
udn網路城邦
arduino 使用按鈕閃爍左移 另一個右移(使用中斷)
2025/01/02 02:04
瀏覽85
迴響0
推薦0
引用0

// 一個按鈕讓LED從【右到左】依序亮滅。

// 另一個按鈕讓LED從【左到右】依序亮滅。


const byte forwardBtnPin = 2;

const byte backwardBtnPin = 3;

//右到左 左到右

volatile bool forward=true;

volatile bool backward=false;

// 低電位 LOW ,LED 暗。 高電位 HIGH,LED 亮

volatile byte state = HIGH;


int ledPins[] = {4,5,6,7,8,9,10,11,12,13}; // The LED pins

int num = sizeof(ledPins) / sizeof(int);

int delayMS = 200; // 延遲時間,單位毫秒 ms


void setup()

{

  

  

  pinMode(forwardBtnPin, INPUT_PULLUP);

  pinMode(backwardBtnPin, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(forwardBtnPin), forwardInterrupt, CHANGE);

  attachInterrupt(digitalPinToInterrupt(backwardBtnPin), backwardInterrupt, CHANGE);


}


void loop()

{  

   if (forward) {

    moveLEDLeftToRight();

  } else if (backward) {

    moveLEDRightToLeft();

  }

}

  


// 從左到右點亮 LED

void moveLEDLeftToRight() {

  for (int i = 0; i < num; i++) {

    digitalWrite(ledPins[i], HIGH); // 點亮 LED

    delay(200);                     // 延遲 200 毫秒

    digitalWrite(ledPins[i], LOW);  // 熄滅 LED

    delay(200);        

  }

}


// 從右到左點亮 LED

void moveLEDRightToLeft() {

  for (int i = num - 1; i >= 0; i--) {

    digitalWrite(ledPins[i], HIGH); // 點亮 LED

    delay(200);                     // 延遲 200 毫秒

    digitalWrite(ledPins[i], LOW);  // 熄滅 LED

    delay(200);                     // 延遲 200 毫秒

  }

}

  


void forwardInterrupt() {

  forward=true;

  backward=false;

}

  void  backwardInterrupt(){

    

    backward=true;

    forward=false;

  }
你可能會有興趣的文章:

限會員,要發表迴響,請先登入