#define PIN_ULTRASONIC_ECHO (2)
#define PIN_ULTRASONIC_TRIGGER (7)
#define PIN_INTERUPT_BUTTON (2)
void isr_us(void);
void trigger(void);
unsigned long timestamp;
unsigned long us_start;
unsigned long us_end;
bool measurementReady = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(PIN_ULTRASONIC_ECHO, INPUT);
pinMode(PIN_ULTRASONIC_TRIGGER, OUTPUT);
attachInterrupt(digitalPinToInterrupt(PIN_ULTRASONIC_ECHO),isr_us, CHANGE);
timestamp = millis();
}
void loop() {
// put your main code here, to run repeatedly:
if(millis() >= timestamp){
trigger();
timestamp += 500;
}
if (measurementReady){
measurementReady = false;
unsigned long timeDelta = us_end - us_start;
Serial.println(timeDelta / 58);
}
}
void isr_us(void){
if(digitalRead(PIN_ULTRASONIC_ECHO) == HIGH){
us_start = micros();
}
else{
us_end = micros();
measurementReady = true;
}
}
void trigger(void){
digitalWrite(PIN_ULTRASONIC_TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_ULTRASONIC_TRIGGER, LOW);
}