From b5de58469458c1f909cd76ce193f845aafe3a692 Mon Sep 17 00:00:00 2001 From: Tom Nordal Date: Wed, 26 Jun 2024 22:15:11 +0200 Subject: [PATCH] lesson 61 moved --- lessons/lesson61.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 lessons/lesson61.cpp diff --git a/lessons/lesson61.cpp b/lessons/lesson61.cpp new file mode 100644 index 0000000..200d86b --- /dev/null +++ b/lessons/lesson61.cpp @@ -0,0 +1,102 @@ +// Lesson 61. Ultrasonic Sensor with LCD Display +// https://www.youtube.com/watch?v=nC2CDaqJomA + + +#include +#include + +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 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() +{ + // put your setup code here, to run once: + Serial.begin(9600); + Serial.println("Measurring Distance"); + + delay(setTime); + + lcd.begin(16, 2); + lcd.print("Hello, World!"); + + pinMode(trigPin, OUTPUT); + pinMode(echoPin, INPUT); + pinMode(buttonPin, INPUT); + digitalWrite(buttonPin, HIGH); +} + +void loop() +{ + // put your main code here, to run repeatedly + buttomState = digitalRead(buttonPin); + while (buttomState == HIGH) + { + lcd.setCursor(0, 0); + lcd.print("Place the Target"); + lcd.setCursor(0, 1); + lcd.print("Press the Button"); + buttomState = digitalRead(buttonPin); + } + + { + 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 + + bucketDist = bucketDist + distance; + bucketTime = bucketTime + pingTravleTime; + + } + + averageMeasurements = bucketDist / numReadings; + averageTime = bucketTime / numReadings; + + Serial.print("Ping Time and Distance:"); + Serial.print("Ping Time: "); + Serial.print(averageTime); + Serial.print(" Distance: "); + Serial.print(averageMeasurements); + Serial.println(" cm"); + + // Display on LCD + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Ping Time: "); + lcd.print(averageTime); + lcd.print("us"); + lcd.setCursor(0, 1); + lcd.print("Distance: "); + lcd.print(averageMeasurements); + lcd.print("cm"); + } +}