偵測距離控制矩陣LED(使用超音波控制8X8矩陣LED圖案移速度)

功能:超音波偵測物體越靠近,矩陣LED的右箭頭移動速度就越快

 

材料接線:

超音波HC-SR04的接腳 Trig=12,Echo=13,

矩陣LED MAX7219 8X8的接腳 DIN=7,CLK=6,CS=5

 

 

程式:

 

// 程式名稱:超音波偵測物體越靠近,矩陣LED的右箭頭移動速度就越快
// 超音波HC-SR04的接腳 Trig=12,Echo=13

// 矩陣LED MAX7219 8X8的接腳 DIN=7,CLK=6,CS=5

#include <LedControl.h> //使用函式庫LedControl  by Eberhard Fahle

#include <Ultrasonic.h> //使用函式庫Ultrasonic  by Erick Simoes

 

Ultrasonic ultrasonic(12, 13); //超音波接腳 Trig=12,Echo=13

int distance;  //定義變數存放超音波偵測到的距離

 

LedControl display = LedControl(7,6,5,1); //矩陣接腳 DIN=7,CLK=6,CS=5,要控制幾個矩陣LED=1

const uint64_t IMAGES[] = {   //設定陣列,每列放一個矩陣畫面圖形16進位值,右箭頭共9個畫面

  0x0000000100000000,

  0x0001030703010000,

  0x02060f1f0f060200,

  0x08183f7f3f180800,

  0x10307fff7f301000,
  0x40c0fcfcfcc04000,
  0x0000f0f0f0000000,
  0x0000c0c0c0000000,
  0x0000000000000000
};
const int IMAGES_LEN = sizeof(IMAGES)/8;
void setup()
{
  display.clearDisplay(0);    // 清除螢幕
  display.shutdown(0, false);  // 關閉省電模式
  display.setIntensity(0, 1); // 設定為低亮度 1 (介於0~15之間)
}
void displayImage(uint64_t image) { // 自定函式:顯示每個畫面圖形
  for (int i = 0; i < 8; i++) {
    byte row = (image >> i * 8) & 0xFF;
    for (int j = 0; j < 8; j++) {
      display.setLed(0, i, j, bitRead(row, j));
    }
  }
}
int i = 0;
void loop() {
  displayImage(IMAGES[i]); // 執行顯示矩陣LED的自定函式
  if (++i >= IMAGES_LEN ) {
    i = 0;
  }
  distance = ultrasonic.read(); //超音波偵測距離,不加參數表示單位為公分CM
  delay(distance); //依偵測到的距離進行延遲
}