感應愛心







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


  }


}

留言