#ifndef Car_Lib_h
#define Car_Lib_h
float ultrasonic_distance(int trigPin, int echoPin);
int potentiometer_Read(int pin);
void motor_forward(int IN1, int IN2, int speed);
void motor_backward(int IN1, int IN2, int speed);
void motor_hold(int IN1, int IN2);
#endif
//car.library.cpp 부분
#include "Arduino.h"
float ultrasonic_distance(int trigPin, int echoPin)
{
long distance, duration;
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = ((float)(340 * duration) / 1000) / 2;
return distance;
}
int potentiometer_Read(int pin)
{
int value;
value = analogRead(pin) / 4; //analogRead(pin)/4의 이유:
//analogRead(pin)은 0~1000 범위 하지만 pwm은 0~255까지의 값밖에 못읽기 때문에 /4를 해줌.
//value = map(value,0,1000,0,255) 이런식으로 바꿔도 좋음
return value;
}
void motor_forward(int IN1, int IN2, int speed)
{
analogWrite(IN1, speed); //IN1은 speed 출력
analogWrite(IN2, LOW); //IN2는 LOW 출력 = 정방향 회전
}
void motor_backward(int IN1, int IN2, int speed)
{
analogWrite(IN1, LOW); //IN1은 LOW 출력
analogWrite(IN2, speed); //IN2는 speed 출력 = 역방향 회전
}
void motor_hold(int IN1, int IN2)
{
analogWrite(IN1, LOW);
analogWrite(IN2, LOW); //IN1,2 모두 LOW는 정지
}
int trig=3;//초음파 발사 제어
int echo=2;//초음파 수신
long distance;
int analogPin = A5;
int val; //저항값 변수 val 선언.
int motorA1=4; //
int motorA2=5; //모터의 IN1,IN2부분이 연결된 아두이노 아날로그 핀번호를 기억해서 지정하면 된다.
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);//통신속도 조절
pinMode(trig, OUTPUT);//값을 보내 초음파를 보내므로 OUTPUT으로
pinMode(echo, INPUT);//거리값을 수신하므로 INPUT
pinMode(LED_BUILTIN, OUTPUT);
pinMode(motorA1, OUTPUT); //motor에 아두이노 제어값을 보냄
pinMode(motorA2, OUTPUT); //이하 동문
}
//setup 함수는 한번만 실행되는 부분.
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()) {
val=Serial.parseInt();
if(val>=0) {
analogWrite(LED_BUILTIN,val);
}
}
//loop는 여러번 실행되는 부분.
//serial.print는 serial 창에 print 하라는 뜻.
/*
distance=ultrasonic_distance(trig,echo);
Serial.print(distance);
Serial.println(" mm");//println은 데이터 출력후 줄바꿈을 실행하라는 뜻.
delay(1000); // 1초 간격을 출력하라.
//현재활성화 시킨 부분(초음파 센서 거리 출력)
val=potentiometer_Read(analogPin); //val값을 저항값을 읽어들이는 함수로 지정
Serial.println(val);//val을 시리얼 모니터에 출력.
analogWrite(LED_BUILTIN,val);//가변저항 값을 LED로 보내 LED 출력을 조절함.
Serial.println(val);
//현재활성화 시킨 부분(저항 출력 및 Builtin LED 출력 조절)
*/
Serial.println("Motor Forward");
motor_forward(motorA1,motorA2,175); //motor_foward(모터 핀변수1, 모터 핀변수2, 제어할 저항값)
delay(3000);
Serial.println("Motor Backward");
motor_backward(motorA1,motorA2,175);
delay(3000);
Serial.println("Motor hold");
motor_hold(motorA1,motorA2);
delay(3000);
}