#include <LedControl.h>
// HC-SR04 超音波感測器引腳定義
#define trigPin 9 // 觸發引腳連接到 Arduino 數字引腳 9
#define echoPin 8 // 回波引腳連接到 Arduino 數字引腳 8
// 8x8 LED 顯示模組引腳定義 (基於 MAX7219 驅動芯片)
#define DATA_IN 5 // DIN 引腳連接到 Arduino 數字引腳 5
#define CLK_PIN 7 // CLK 引腳連接到 Arduino 數字引腳 7
#define LOAD_PIN 6 // CS 引腳連接到 Arduino 數字引腳 6
// 初始化 LedControl 物件 (DIN, CLK, CS, 顯示器數量)
LedControl lc = LedControl(DATA_IN, CLK_PIN, LOAD_PIN, 1); // 1 表示有一個 8x8 顯示模組
void setup() {
// 初始化序列埠
Serial.begin(9600);
// 設置超音波感測器引腳
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// 設置 LED 顯示模組的初始狀態
lc.shutdown(0, false); // 啟動顯示
lc.setIntensity(0, 8); // 設置亮度,範圍為 0 到 15
lc.clearDisplay(0); // 清除顯示器的顯示內容
}
void loop() {
long duration, distance;
// 發送超音波脈衝
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 測量回波的持續時間
duration = pulseIn(echoPin, HIGH);
// 計算距離 (以厘米為單位)
distance = (duration / 2) / 29.1;
// 顯示距離到序列監視器
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 根據距離顯示笑臉圖案
if (distance < 20) { // 如果距離小於 20 厘米,顯示笑臉
showSmileyFace();
} else { // 如果距離大於 20 厘米,清除顯示
lc.clearDisplay(0);
}
delay(500); // 等待 500 毫秒再進行下一次測量
}
// 顯示笑臉圖案
void showSmileyFace() {
byte smileyFace[8] = {
0x3C, // 00111100
0x42, // 01000010
0xA5, // 10100101
0x81, // 10000001
0xA5, // 10100101
0x99, // 10011001
0x42, // 01000010
0x3C // 00111100
};
// 顯示笑臉
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, smileyFace[row]);
}
}
留言
張貼留言