1.給ChayGPT校網上的超音波感應笑臉範例(超音波+8X8 LED)
https://lujuer.blogspot.com/2025/03/blog-post_45.html
3.請ChayGPT參考上述程式碼寫超音波計球次
程式碼如下
#include <LedControl.h>
// HC-SR04 超音波感測器引腳定義
#define trigPin 9 // 觸發引腳
#define echoPin 8 // 回波引腳
// 8x8 LED 顯示模組引腳定義
#define DATA_IN 5 // DIN
#define CLK_PIN 7 // CLK
#define LOAD_PIN 6 // CS
// 初始化 LedControl 物件
LedControl lc = LedControl(DATA_IN, CLK_PIN, LOAD_PIN, 1);
int score = 0; // 記錄進球次數
bool ballPassed = false; // 避免重複計數
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// 設置 LED 顯示模組
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
displayNumber(score); // 初始化顯示計數
}
void loop() {
long duration, distance;
// 觸發超音波感測器
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 讀取回波時間並轉換為距離 (cm)
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 偵測球是否通過 (假設球直徑小於 10cm)
if (distance > 2 && distance < 10) {
if (!ballPassed) {
score++; // 累加球數
displayNumber(score); // 更新顯示
ballPassed = true; // 標記球已通過
Serial.println("Ball Passed! Score +1");
}
} else {
ballPassed = false; // 重置狀態,等待下一顆球
}
delay(200); // 避免過度偵測
}
// 顯示數字 (僅支援 0~9)
void displayNumber(int num) {
byte numbers[10][8] = {
{0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C, 0x00}, // 0
{0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, // 1
{0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E, 0x00}, // 2
{0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00}, // 3
{0x0C, 0x1C, 0x2C, 0x4C, 0x7E, 0x0C, 0x0C, 0x00}, // 4
{0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00}, // 5
{0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00}, // 6
{0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00}, // 7
{0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00}, // 8
{0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C, 0x00} // 9
};
if (num > 9) num = num % 10; // 目前只支援 0~9,超過則取個位數
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, numbers[num][row]);
}
}
留言
張貼留言