感應切換愛心與十字架閃爍

 #include <LedControl.h>


// 超音波感測器腳位

#define trigPin 9

#define echoPin 8


// LED Matrix 腳位設定

#define DATA_IN 5   // DIN

#define CLK_PIN 7   // CLK

#define LOAD_PIN 6  // CS


LedControl lc = LedControl(DATA_IN, CLK_PIN, LOAD_PIN, 1);


// ❤️ 愛心圖案(靜態)

byte heart[8] = {

  B00000000,

  B01100110,

  B11111111,

  B11111111,

  B01111110,

  B00111100,

  B00011000,

  B00000000

};


// ✝️ 十字架圖案(粗)

byte cross1[8] = {

  B00011000,

  B00011000,

  B01111110,

  B01111110,

  B00011000,

  B00011000,

  B00011000,

  B00011000

};


// ✝️ 十字架圖案(空白)

byte cross2[8] = {

  B00000000,

  B00000000,

  B00000000,

  B00000000,

  B00000000,

  B00000000,

  B00000000,

  B00000000

};


void setup() {

  Serial.begin(9600);

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);


  lc.shutdown(0, false);     // 啟動 LED 模組

  lc.setIntensity(0, 8);     // 設定亮度(0~15)

  lc.clearDisplay(0);        // 清除顯示

}


void loop() {

  long distance = getDistance();


  if (distance < 20) { // 感應距離小於 20cm 時閃爍十字架

    displayPattern(cross1);

    delay(500);

    displayPattern(cross2);

    delay(300);

  } else {

    displayPattern(heart); // 無人靠近時顯示愛心

  }


  delay(100);

}


// 測距函數

long getDistance() {

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);


  long duration = pulseIn(echoPin, HIGH);

  long distance = duration * 0.034 / 2; // 單位:cm

  return distance;

}


// 顯示圖案函數

void displayPattern(byte pattern[8]) {

  for (int row = 0; row < 8; row++) {

    lc.setRow(0, row, pattern[row]);

  }

}


留言