感應愛心跳動

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

  }

}


留言