/*聲音在空氣中的傳播速度大約是每秒 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);
}
沒有留言:
張貼留言