改成眼睛 開眼 閉眼 有感應時 開眼睛有瞳孔 沒有時閉眼(微笑曲線)

 #include <LedControl.h>


// 超音波感測器引腳定義

#define trigPin 9   // Trig 引腳 (接 HC-SR04)

#define echoPin 8   // Echo 引腳 (接 HC-SR04)


// 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);


// "開眼睛有瞳孔" 圖形

byte openEye[8] = {

    B00111100,

    B01100110,

    B11011011,

    B10011001,

    B01000010,

    B00111100,

    B00000000,

    B00000000

};


// "閉眼微笑" 圖形

byte closedEyeSmile[8] = {

    B00000000,

    B00000000,

    B00000000,

    B10000001,

    B11000011,

    B01100110,

    B00111100,

    B00000000

};


void setup() {

  Serial.begin(9600);         // 初始化串列監視器

  pinMode(trigPin, OUTPUT);   // 設定 Trig 引腳為輸出

  pinMode(echoPin, INPUT);    // 設定 Echo 引腳為輸入


  // 初始化 LED 顯示模組

  lc.shutdown(0, false);      // 啟用 LED 模組

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


  // 讀取回波時間並計算距離 (cm)

  duration = pulseIn(echoPin, HIGH);

  distance = duration * 0.034 / 2;


  Serial.print("Distance: ");

  Serial.print(distance);

  Serial.println(" cm");


  // 根據距離顯示不同的圖形

  if (distance > 0 && distance <= 100) {

    Serial.println("Object detected! Displaying 'Open Eye'.");

    displayPattern(openEye); // 顯示「開眼睛有瞳孔」

  } else {

    Serial.println("No object detected. Displaying 'Closed Eye Smile'.");

    displayPattern(closedEyeSmile); // 顯示「閉眼微笑」

  }


  delay(500);  // 避免過於頻繁的偵測

}


// 顯示特定 8×8 圖形

void displayPattern(byte pattern[8]) {

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

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

  }

}


留言