#define echo 2
#define trig 3
unsigned long echo_start; //초음파반향수신시작시간
unsigned long echo_end; //초음파반향수신종료시간
unsigned long echo_t; //초음파반향수신길이
unsigned long t1; //초음파센서작동주기기용
float distance; // 측정됨거리cm
void ISR_echoUP(){ //초음파반향수신시작시간
echo_start = micros();
attachInterrupt(digitalPinToInterrupt(echo),ISR_echoDOWN, FALLING);
}
void ISR_echoDOWN(){ //초음파반향수신종료시간
echo_end = micros();
echo_t = (echo_end - echo_start);
//Serial.println(echo_t);
if(echo_t>=23530 || echo_t <= 115){Serial.println("out");}//측정범위를 넘어서면
else{distance = ((echo_t*17.0)/1000.0); Serial.println(distance,1);}//cm
}
void Wave(){
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);//초음파 발사 10us동안
echo_start=0;
echo_end =0;
attachInterrupt(digitalPinToInterrupt(echo),ISR_echoUP, RISING);//인터럽트는 low에서 high가되면 발생
}
void setup() {
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
Serial.begin(115200);
t1=millis();
}
void loop() { //25ms마다 초음파 거리측정(장치의 권장사양)
if(millis()-t1>=25){
Wave();
t1=millis();
}
}