專題範例_超音波感應顯示笑臉

 


#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]);

  }

}


留言