HC - SR04 超音波測距 & 計算

/*聲音在空氣中的傳播速度大約是每秒 340 公尺,
傳播速度會受溫度影響,溫度愈高傳播速度愈快。
假設以 340 公尺計算,1000000 / 340 * 100 = 29.4 ms,四捨五入後,
可知聲音傳播 1 公分所需的時間為 29 microseconds (百萬分之一秒)。*/
// https://raspberrypi.readbook.tw/hcsr04.html
// http://lihan.shinyo.bixone.com/Arduino/arduino-2016.12.21.html
/* HC - SR04 接腳說明 :
 * VCC : 輸入電壓5V 接到 VU 接腳
 * Trig : 觸發腳,可共用GPIO接腳
 * Echo : 接收腳,不可共用GPIO接腳
 */
int pins[7] = {D3,D2,D4,D5,D6,D0,D1};
boolean data[11][7] = {
1,1,1,1,1,1,0,   // 0
0,1,1,0,0,0,0,   // 1
1,1,0,1,1,0,1,   // 2
1,1,1,1,0,0,1,   // 3
0,1,1,0,0,1,1,   // 4
1,0,1,1,0,1,1,   // 5
1,0,1,1,1,1,1,   // 6
1,1,1,0,0,1,0,   // 7
1,1,1,1,1,1,1,   // 8
1,1,1,1,0,1,1,   // 9
0,0,0,0,0,0,0,}; // 10 ( off_all_LED )
void writeNumber(int n){ //把七段顯示器顯示函式獨立
  for(int i = 0; i < 7; i++){
    digitalWrite(pins[i], data[n][i] == HIGH);
  }
}

const byte trig = D7; //觸發腳
const int echo = D8; //接收腳
unsigned long d;
unsigned long ping (){
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  return pulseIn (echo,HIGH); //I為大i
  }

void setup(){
  Serial.begin(9600);
  pinMode(D0, OUTPUT);
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  pinMode(D3, OUTPUT);
  pinMode(D4, OUTPUT);
  pinMode(D5, OUTPUT);
  pinMode(D6, OUTPUT);
  pinMode(trig, OUTPUT);
  pinMode(echo,INPUT);               
}
int n;
void loop(){
d = ping() / 58.8 ;
  Serial.print(d);
  Serial.print("cm");
  Serial.println( );
  Serial.println(ping() );
  if (d <= 18){
    n = d / 2 ;
    writeNumber(n+1);
    }
  delay(150);
}

沒有留言:

張貼留言