#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]);
}
}
留言
張貼留言