|
|
|
@ -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 <Arduino.h> |
|
|
|
#include <Arduino.h> |
|
|
|
@ -7,21 +8,27 @@ |
|
|
|
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12; |
|
|
|
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12; |
|
|
|
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); |
|
|
|
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int trigPin = 2; |
|
|
|
int trigPin = 2; |
|
|
|
int echoPin = 3; |
|
|
|
int echoPin = 3; |
|
|
|
int pingTravleTime; |
|
|
|
int pingTravleTime; |
|
|
|
float distance; |
|
|
|
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
|
|
|
|
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 buttonPin = A0; |
|
|
|
int buttomState; |
|
|
|
int buttomState; |
|
|
|
|
|
|
|
|
|
|
|
int setTime = 500; |
|
|
|
int setTime = 500; |
|
|
|
int dt = 1000; |
|
|
|
int dt = 1000; |
|
|
|
|
|
|
|
|
|
|
|
void setup() { |
|
|
|
void setup() |
|
|
|
|
|
|
|
{ |
|
|
|
// put your setup code here, to run once:
|
|
|
|
// put your setup code here, to run once:
|
|
|
|
Serial.begin(9600); |
|
|
|
Serial.begin(9600); |
|
|
|
Serial.println("Measurring Distance"); |
|
|
|
Serial.println("Measurring Distance"); |
|
|
|
@ -37,7 +44,8 @@ void setup() { |
|
|
|
digitalWrite(buttonPin, HIGH); |
|
|
|
digitalWrite(buttonPin, HIGH); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void loop() { |
|
|
|
void loop() |
|
|
|
|
|
|
|
{ |
|
|
|
// put your main code here, to run repeatedly
|
|
|
|
// put your main code here, to run repeatedly
|
|
|
|
buttomState = digitalRead(buttonPin); |
|
|
|
buttomState = digitalRead(buttonPin); |
|
|
|
while (buttomState == HIGH) |
|
|
|
while (buttomState == HIGH) |
|
|
|
@ -48,35 +56,47 @@ void loop() { |
|
|
|
lcd.print("Press the Button"); |
|
|
|
lcd.print("Press the Button"); |
|
|
|
buttomState = digitalRead(buttonPin); |
|
|
|
buttomState = digitalRead(buttonPin); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
digitalWrite(trigPin, LOW); |
|
|
|
bucketDist = 0.0; |
|
|
|
delayMicroseconds(pulsTime); |
|
|
|
bucketTime = 0.0; |
|
|
|
digitalWrite(trigPin, HIGH); |
|
|
|
|
|
|
|
delayMicroseconds(pulsTime); |
|
|
|
for (int i = 0; i < numReadings; i++) |
|
|
|
digitalWrite(trigPin, LOW); |
|
|
|
{ |
|
|
|
pingTravleTime = pulseIn(echoPin, HIGH); |
|
|
|
digitalWrite(trigPin, LOW); |
|
|
|
delay(25); |
|
|
|
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 and Distance:"); |
|
|
|
Serial.print("Ping Time: "); |
|
|
|
Serial.print("Ping Time: "); |
|
|
|
Serial.print(pingTravleTime); |
|
|
|
Serial.print(averageTime); |
|
|
|
Serial.print(" Distance: "); |
|
|
|
Serial.print(" Distance: "); |
|
|
|
Serial.print(distance); |
|
|
|
Serial.print(averageMeasurements); |
|
|
|
Serial.println(" cm"); |
|
|
|
Serial.println(" cm"); |
|
|
|
|
|
|
|
|
|
|
|
// Display on LCD
|
|
|
|
// Display on LCD
|
|
|
|
lcd.clear(); |
|
|
|
lcd.clear(); |
|
|
|
lcd.setCursor(0, 0); |
|
|
|
lcd.setCursor(0, 0); |
|
|
|
lcd.print("Ping Time: "); |
|
|
|
lcd.print("Ping Time: "); |
|
|
|
lcd.print(pingTravleTime); |
|
|
|
lcd.print(averageTime); |
|
|
|
lcd.print("us"); |
|
|
|
lcd.print("us"); |
|
|
|
lcd.setCursor(0, 1); |
|
|
|
lcd.setCursor(0, 1); |
|
|
|
lcd.print("Distance: "); |
|
|
|
lcd.print("Distance: "); |
|
|
|
lcd.print(distance); |
|
|
|
lcd.print(averageMeasurements); |
|
|
|
lcd.print("cm"); |
|
|
|
lcd.print("cm"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|