From eab381356e562f5e408a9fbfe0252e0fe2017157 Mon Sep 17 00:00:00 2001 From: Tom Nordal Date: Wed, 26 Jun 2024 22:12:33 +0200 Subject: [PATCH] lesson 61 finished --- Sensors/src/main.cpp | 60 +++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/Sensors/src/main.cpp b/Sensors/src/main.cpp index eeaef15..200d86b 100644 --- a/Sensors/src/main.cpp +++ b/Sensors/src/main.cpp @@ -1,4 +1,5 @@ -// https://www.youtube.com/watch?v=A6kEroT-g2o&list=PLGs0VKk2DiYw-L-RibttcvK-WBZm8WLEP&index=60 +// Lesson 61. Ultrasonic Sensor with LCD Display +// https://www.youtube.com/watch?v=nC2CDaqJomA #include @@ -7,21 +8,27 @@ const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); - int trigPin = 2; int echoPin = 3; int pingTravleTime; float distance; -const int pulsTime = 40; // uS +const int pulsTime = 40; // uS const float pingTimeToDistance = 0.017; // uS to cm, travletime[s] * 340 m/s / 2 +int numReadings = 50; +float averageMeasurements; +float averageTime; +float bucketDist = 0.0; +float bucketTime = 0.0; + int buttonPin = A0; int buttomState; int setTime = 500; int dt = 1000; -void setup() { +void setup() +{ // put your setup code here, to run once: Serial.begin(9600); Serial.println("Measurring Distance"); @@ -37,7 +44,8 @@ void setup() { digitalWrite(buttonPin, HIGH); } -void loop() { +void loop() +{ // put your main code here, to run repeatedly buttomState = digitalRead(buttonPin); while (buttomState == HIGH) @@ -45,38 +53,50 @@ void loop() { lcd.setCursor(0, 0); lcd.print("Place the Target"); lcd.setCursor(0, 1); - lcd.print("Press the Button"); + lcd.print("Press the Button"); buttomState = digitalRead(buttonPin); } + { - digitalWrite(trigPin, LOW); - delayMicroseconds(pulsTime); - digitalWrite(trigPin, HIGH); - delayMicroseconds(pulsTime); - digitalWrite(trigPin, LOW); - pingTravleTime = pulseIn(echoPin, HIGH); - delay(25); + bucketDist = 0.0; + bucketTime = 0.0; + + for (int i = 0; i < numReadings; i++) + { + digitalWrite(trigPin, LOW); + delayMicroseconds(pulsTime); + digitalWrite(trigPin, HIGH); + delayMicroseconds(pulsTime); + digitalWrite(trigPin, LOW); + pingTravleTime = pulseIn(echoPin, HIGH); + delay(25); - distance = pingTravleTime * pingTimeToDistance; // Travel time to distance in cm + distance = pingTravleTime * pingTimeToDistance; // Travel time to distance in cm + + bucketDist = bucketDist + distance; + bucketTime = bucketTime + pingTravleTime; + + } + + averageMeasurements = bucketDist / numReadings; + averageTime = bucketTime / numReadings; Serial.print("Ping Time and Distance:"); Serial.print("Ping Time: "); - Serial.print(pingTravleTime); + Serial.print(averageTime); Serial.print(" Distance: "); - Serial.print(distance); + Serial.print(averageMeasurements); Serial.println(" cm"); // Display on LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ping Time: "); - lcd.print(pingTravleTime); + lcd.print(averageTime); lcd.print("us"); lcd.setCursor(0, 1); lcd.print("Distance: "); - lcd.print(distance); + lcd.print(averageMeasurements); lcd.print("cm"); } - - }