#define keyin 2
// defines variables
const int Trig_Pins = 13;//trig 腳位
const int Echo_Pins = 12;// echo 腳位
bool flag=0;
static long count=0;
float get_distance(int trig, int echo){ //計算距離
float duration;
digitalWrite(trig, HIGH);
delayMicroseconds(10); //給予trig 10us TTL pulse,讓模組發射聲波
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH, 5000000);//紀錄echo電位從high到low的時間,就是超音波來回的時間,若5秒內沒收到超音波則回傳0
return duration / 29 / 2; // 聲速340m/s ,換算後約每29微秒走一公分,超音波來回所以再除2
}
void setup()
{
pinMode(keyin, INPUT);
pinMode(Trig_Pins, OUTPUT);
pinMode(Echo_Pins, INPUT);
Serial.begin(9600); // // Serial Communication is starting with 9600 of baudrate speed
attachInterrupt(digitalPinToInterrupt(keyin), keytrans, FALLING); //mode= falling edge status
}
void keytrans()
{
flag=1; //set flag=1
count++;
}
void loop()
{
if(flag==1)
{
if(digitalRead(keyin) == LOW) //check pin2 status
{
delay(80); //delay 80ms
if(digitalRead(keyin) == LOW) //check pin2 again
{
float result= get_distance( Trig_Pins, Echo_Pins);
Serial.print("Distance: ");
Serial.print(result);
Serial.println("cm");
delay(1000);
flag=0; //clear flag
}
}
}
}