當超音波感應前方物體時 在8X8 LED 動態顯示 沒感應到物體時顯示 x 1公尺有物體時顯示o

 #include <LedControl.h>


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

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


#define DATA_IN 5   // DIN

#define CLK_PIN 7   // CLK

#define LOAD_PIN 6  // CS


LedControl lc = LedControl(DATA_IN, CLK_PIN, LOAD_PIN, 1);


// "X" 圖形

byte X_pattern[8] = {

    B10000001,

    B01000010,

    B00100100,

    B00011000,

    B00011000,

    B00100100,

    B01000010,

    B10000001

};


// "O" 圖形

byte O_pattern[8] = {

    B00111100,

    B01000010,

    B10000001,

    B10000001,

    B10000001,

    B10000001,

    B01000010,

    B00111100

};


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


  // 根據距離顯示 "O" 或 "X"

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

    displayPattern(O_pattern);

  } else {

    displayPattern(X_pattern);

  }


  delay(500);

}


// 顯示指定圖形

void displayPattern(byte pattern[8]) {

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

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

  }

}


留言