// 서보모터로 초음파센서 움직여서 그 방향에있는 물건탐지 후 거리측정
#include <Servo.h>

const int echoPin  = 3;    //Echo 핀 할당
const int trigPin  = 4;    //Trig 핀 할당
const int servoPin = 5;    //Servo핀 할당

long duration;    //왕복시간
int distance;     //거리 cm

Servo myServo;    //서보모터 제어를 위한 객체 생성

void setup()
{
  pinMode(trigPin, OUTPUT);    //Trig 핀 output으로 세팅
  pinMode(echoPin, INPUT);     //Echo 핀 input으로 세팅
  Serial.begin(115200);        //시리얼 초기화
  //Serial.println("Distance Measure (Ultrasonic Sensor)");
  myServo.attach(servoPin);    //서보모터 연결핀
}

void loop()
{
  // 서보모터 15도~164도 회전
  for(int i=15; i<165; i++){  
    myServo.write(i);
    delay(30);
    distance = calculateDistance(); //초음파센서로 물체와의 거리 측정
    
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print("\n");
  }
  // 서보모터 165도~16도 회전
  for(int i=165; i>15; i--){  
    myServo.write(i);
    delay(30);
    distance = calculateDistance(); //초음파센서로 물체와의 거리 측정
    
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print("\n");
  }
}

int calculateDistance() 
{
  //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 핀으로 들어오는 펄스의 시간 측정
  duration = pulseIn(echoPin, HIGH); //pulseIn함수가 호출되고 펄스가 입력될 때까지의 시간. us단위로 값을 리턴.

  //음파가 반사된 시간을 거리로 환산
  //음파의 속도는 340m/s 이므로 1cm를 이동하는데 약 29us
  //따라서, 물체와의 거리 = 왕복시간 * 음속(0.034) / 2
  //또는    물체와의 거리 = 왕복시간 / 음파이동시간(29) / 2
  distance = duration * 0.034 / 2;        //센치미터로 환산
  //distance = duration / 58.8;        //센치미터로 환산

  return distance;
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
servo1:GND
servo1:V+
servo1:PWM