#include <LedControl.h>
#define trigPin 9 // Trig 引腳 (接 HC-SR04)
#define echoPin 8 // Echo 引腳 (接 HC-SR04)
#define DATA_IN 5 // DIN (LED Matrix)
#define CLK_PIN 7 // CLK
#define LOAD_PIN 6 // CS
LedControl lc = LedControl(DATA_IN, CLK_PIN, LOAD_PIN, 1);
// 愛心圖案 1(較大)
byte heart1[8] = {
B00000000,
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000
};
// 愛心圖案 2(較小)
byte heart2[8] = {
B00000000,
B00000000,
B00100100,
B01111110,
B00111100,
B00011000,
B00000000,
B00000000
};
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
}
void loop() {
long distance = getDistance();
if (distance < 15) { // 當距離小於 15cm 時,愛心停 3 秒
displayPattern(heart1);
delay(3000); // 停留 3 秒
} else {
// 愛心持續跳動
displayPattern(heart1);
delay(300);
displayPattern(heart2);
delay(300);
}
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]);
}
}
留言
張貼留言