超音波+8X8 LED矩陣 範例_感應愛心














#include <LedControl.h>

// 工具 管理程式庫 安裝LED CONTROL

#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 < 50) { // 小於 50cm 時顯示跳動愛心

    animateHeart(3000); // 3 秒動畫

    lc.clearDisplay(0);

  }

  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;

  return distance;

}




// **愛心動畫**

void animateHeart(int duration) {

  long startTime = millis();

  while (millis() - startTime < duration) {

    displayPattern(heart1);

    delay(300);

    displayPattern(heart2);

    delay(300);

  }

}




// **顯示圖形**


void displayPattern(byte pattern[8]) {

  for (int row = 0; row < 8; row++) {

    lc.setRow(0, row, pattern[row]);

  }

}




 

留言