BASIC4MCU | 질문게시판 | 아두이노 자동차 후방센서 코드 질문이 있습니다.
페이지 정보
작성자 매생이 작성일2020-06-16 04:33 조회6,695회 댓글2건본문
자동차 후방센서와 같이 물체와의 거리에 따라 부저가 울리는 프로그램을 만들려고 합니다. 회로구성은 사진대로 할 것입니다.
(가변저항, 초음파센서, 피에조부저, LCD)
#include <LiquidCrystal.h>
int trigPin=10; //아두이노가 전류를 넣어 초음파를 발사하게 하는 핀
int echoPin=11; //수신부로 입력된 초음파를 받는 핀
int distance; //거리계산을 함수로 작성하기 위한 변수
LiquidCrystal LCD(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
LCD.begin(16, 2);
}
void loop() {
distance = checkDistance();
LCD.print("distance: ");
LCD.print(distance);
LCD.println(" cm");
delay(500);
}
int checkDistance() {
//초음파 발생시킴 : 10us 동안 전류를 trigPin에 출력
digitalWrite(trigPin, LOW);
delayMicroseconds(2); //초기화
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
distance=pulseIn(echoPin, HIGH)/2 * 0.034; //돌아온 초음파를 분석하여 거리 계산
return distance;
}
일단 코드는 이런식으로 작성하였습니다. 거리 출력 부분을 시리얼 모니터가 아닌 LCD로 표시하기 위해 LCD.print를 사용하였고요.
*아주 간단한 코드로 만들려고 하기 때문에 함수화 할 수 있는 것들은 함수로 묶은 뒤에 호출을 하고싶습니다.
예를 들면 "거리 계산 함수"와 "피에조부저 소리를 내는 함수" 등 입니다.*
그리고 회로구조사진을 보시면 피에조부저가 디지털핀에 연결되어 있지 않습니다.
그런데 이 회로구조상태로
noTone(piezoPin);
if(distance<10) {
tone(piezoPin, 1000, 300);
} else if(distance<20) {
tone(piezoPin, 3000, 200);
} else if(distance<30) {
tone(piezoPin, 5000, 100);
} else{
noTone(piezoPin);
}
*이 코드를 변형하여 함수화를 할려면 어찌해야하나요... 피에조부저가 디지털 핀에 꽂혀 있지 않는 상태인데 int형 변수로 선언해도 소용이 있을까 싶습니다.*
아두이노 우노보드를 공부하게 된지 얼마 되지 않은 초보입니다.
제가 말하고자 하는 질문은
제가 작성한 코드로 아주 간단한 코드로 만들려고 하기 때문에 함수화 할 수 있는 것들은 함수로 묶은 뒤에 호출을 하고싶습니다.
예도 위에 말했듯이 "거리 계산 함수"와 "피에조부저 소리를 내는 함수" 정도 입니다.
그리고 두번째 코드를 변형하여 함수화 하고 싶습니다. 변형해야하는 이유가 전 piezoPin 변수를 선언하지도 않았고 디지털핀에 꽂아놓았지 않습니다.
이 코드만 몇 시간을 잡고있는건지 모르겠습니다... 아두이노 고수님들의 도움이 필요합니다.
감사합니다.
댓글 2
조회수 6,695master님의 댓글
master 작성일
피에조 핀을 아두이노에 꼽아야합니다.
6,7,8번 핀이 비어있으니 이 중 하나에 꼽으세요
당연히 코드에서도 핀선언을 해줘야합니다.
매생이님의 댓글
매생이
확실히 그렇겠군요. 감사합니다!