#define ECHO_PIN 34
#define TRIG_PIN 25
volatile unsigned long pulseInTimeBegin = micros();
volatile unsigned long pulseInTimeEnd = micros();
volatile bool newPulseDurationAvailable = false;
void sendTrigPulse() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
//delayMicroseconds(2);
}
void ARDUINO_ISR_ATTR echoInterrupt()
{
if (digitalRead(ECHO_PIN) == HIGH) {
// start measuring
pulseInTimeBegin = micros();
}
else {
// stop measuring
pulseInTimeEnd = micros();
newPulseDurationAvailable = true;
}
}
void setup() {
Serial.begin(9600);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ECHO_PIN),
echoInterrupt,
CHANGE);
}
void loop() {
if (newPulseDurationAvailable) {
newPulseDurationAvailable = false;
unsigned long pulseDuration = pulseInTimeEnd - pulseInTimeBegin;
Serial.println((pulseDuration * 0.034) / 2);
}
sendTrigPulse();
delay(1000);
}