#define TRIG_PIN 14 // Pin connected to TRIGGER pin of HC-SR04 #define ECHO_PIN 12 // Pin connected to ECHO pin of HC-SR04 #define MEASUREMENT_INTERVAL 1000 // 1 second in milliseconds #define SUMMARY_INTERVAL 600000 // 10 minutes in milliseconds long lastMeasurementMillis = 0; long lastSummaryMillis = 0; float totalDistance = 0; float maxDistance = 0; float minDistance = 400; int numMeasurements = 0; void setup() { Serial.begin(9600); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { //Check and see if its time for another measurement if (millis() - lastMeasurementMillis >= MEASUREMENT_INTERVAL) { float distance = readDistance(); totalDistance += distance; if (distance > maxDistance) { maxDistance = distance; } if (distance < minDistance) { minDistance = distance; } numMeasurements++; lastMeasurementMillis = millis(); } if (millis() - lastSummaryMillis >= SUMMARY_INTERVAL) { printSummary(); lastSummaryMillis = millis(); } //When "s" is typed into serial command line, print the summary if (Serial.available()) { char command = Serial.read(); if (command == 's') { printSummary(); } } } //Use digitalWrite to initiate pins and read distance float readDistance() { digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); float time = pulseIn(ECHO_PIN, HIGH); // Distance = (Time * Speed of Sound) / 2 // Speed of Sound = 343 m/s = 34300 cm/s float distance = (time * 0.0343) / 2; return distance; } //Print all summary information void printSummary() { Serial.println("Summary:"); Serial.print("Average Distance over the last 10 minutes: "); Serial.print(totalDistance / numMeasurements); Serial.println(" cm"); Serial.print("Maximum Distance: "); Serial.print(maxDistance); Serial.println(" cm"); Serial.print("Minimum Distance: "); Serial.print(minDistance); Serial.println(" cm"); Serial.print("Overall Average Distance: "); Serial.print(totalDistance / numMeasurements); Serial.println(" cm"); // Resetting values for the next 10 minutes interval totalDistance = 0; maxDistance = 0; minDistance = 400; numMeasurements = 0; }