#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // LCD 설정: 주소 0x27, 16칸, 2줄
const int trigPin = 2; //Trig 핀 할당
const int echoPin = 3; //Echo 핀 할당
void setup()
{
pinMode(trigPin, OUTPUT); //Trig 핀 output으로 세팅
pinMode(echoPin, INPUT); //Echo 핀 input으로 세팅
Serial.begin(115200); //시리얼 초기화
Serial.println("Distance Measure (Ultrasonic Sensor)");
lcd.init(); // LCD 초기화
lcd.backlight(); // backlight 켜기
lcd.print("Distance Measure"); // 문자열 “Distance Measure” 표시
}
void loop()
{
long duration, distance; //기본 변수 선언
//Trig 핀으로 10us의 pulse 발생
digitalWrite(trigPin, LOW); //Trig 핀 Low
delayMicroseconds(2); //2us 유지
digitalWrite(trigPin, HIGH); //Trig 핀 High
delayMicroseconds(10); //10us 유지
digitalWrite(trigPin, LOW); //Trig 핀 Low
//Echo 핀으로 들어오는 펄스의 시간 측정
//pulseIn함수가 호출되고 펄스가 입력될 때까지의 시간. us단위로 값을 리턴
duration = pulseIn(echoPin, HIGH);
//음파가 반사된 시간을 거리로 환산
//음파의 속도는 340m/s 이므로 1cm를 이동하는데 약 29us
//따라서, 물체와의 거리 = 왕복시간 * 음속(0.034) / 2
//또는 물체와의 거리 = 왕복시간 / 음파이동시간(29) / 2
//distance = duration * 0.034 / 2; //센치미터로 환산
// 결과가 정수인 경우
distance = (long)(duration * 0.034) >> 1; // 정수인 경우: shift 연산자를 활용한 2의 n승 나눗셈
//distance = duration / 58.8; //센치미터로 환산
Serial.print(distance);
Serial.println("cm");
lcd.setCursor(0,1); // 커서를 (0열,0행)에 위치
lcd.print(distance);
lcd.println("cm ");
delay(100);
}