// --------------------------------------------------------------------------------
/*

16 顯示超聲波感應器取得的距離

[學習重點]

1. 認識超聲波感應器
參考
https://create.arduino.cc/projecthub/abdularbi17/ultrasonic-sensor-hc-sr04-with-arduino-tutorial-327ff6

[挑戰]

- 研究如何干擾超聲波感應器
  例如利用某些材料去吸收感應器發出的超聲波之類


Created by Jason on 16 Aug 2022.

*/
// --------------------------------------------------------------------------------

// LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

// HC-SR04
#define echoPin 2 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 3 //attach pin D3 Arduino to pin Trig of HC-SR04
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement

void setup() {
  // LCD
  lcd.init();
  lcd.backlight();

  // HC-SR04
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
  pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
}

void loop() {
  // HC-SR04
  digitalWrite(trigPin, LOW); // Clears the trigPin condition
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); // Sets the trigPin HIGH (ACTIVE) for 10 microseconds
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2; // Calculating the distance - Speed of sound wave divided by 2 (go and back)

  // 顯示文字訊息到 LCD
  lcd.setCursor(5,1); // 設定遊標位置 (左邊數第幾個字, 行數)
  lcd.print("Distance:"); // 在遊標位置顯示文字
  lcd.setCursor(5,2);
  lcd.print(distance);
  lcd.print(" cm   ");

  delay(100);
}