https://blog.naver.com/ann_arbor/221361752643
거리 : float 형이나 long 형으로 선언
//초음파 센서의 핀번호를 설정한다.
int echoPin = 2;
int trigPin = 3;
int buzzer = 6;
void setup() {
Serial.begin(9600);
// trig를 출력모드로 설정, echo를 입력모드로 설정
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// echoPin 이 HIGH를 유지한 시간을 저장 한다.
unsigned long duration = pulseIn(echoPin, HIGH);
// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
float distance = ((float)(340 * duration) / 10000) / 2;
Serial.print(distance);
Serial.println("cm");
// 수정한 값을 출력
if(distance <=30) {
analogWrite(buzzer, 1);
}
else {
analogWrite(buzzer, LOW);
}
delay(500);
}
tone(pin, frequency)
tone(pin, frequency, duration)
pin : 파형을 출력할 핀 번호
frequency : 출력할 파형의 주파수(Hz 단위)
duration : 출력 시간(밀리초 단위). 지정하지 않으면 noTone() 함수가 호출될 때까지 출력됨.
tone() 함수에는 아두이노의 모든 핀을 사용할 수 있다. frequency 값은 31 이하로는 설정할 수 없고, frequency 변수의 타입이 unsigned int 형이라 최대 65535Hz까지밖에 설정할 수 없다. 음, 이만큼 크게는 실제로 써 본 적이 없어서 정확한 주파수가 나올 지 모르겠지만, 나오니까 unsigned int 형으로 정해뒀겠지?
//초음파 센서의 핀번호를 설정한다.
int echoPin = 2;
int trigPin = 3;
int buzzer = 6;
void setup() {
Serial.begin(9600);
// trig를 출력모드로 설정, echo를 입력모드로 설정
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// echoPin 이 HIGH를 유지한 시간을 저장 한다.
unsigned long duration = pulseIn(echoPin, HIGH);
// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
float distance = ((float)(340 * duration) / 10000) / 2;
Serial.print(distance);
Serial.println("cm");
// 수정한 값을 출력
if(distance <=20 && distance >=15) {
digitalWrite(8, HIGH);
tone(buzzer, 500, 10);
}
else if(distance <=14 && distance >=10) {
digitalWrite(9, HIGH);
tone(buzzer, 500, 200);
}
else if(distance <=9 && distance >=5) {
digitalWrite(10, HIGH);
tone(buzzer, 500, 400);
}
else if(distance <=4 && distance >=0) {
digitalWrite(11, HIGH);
analogWrite(buzzer, 5);
}
else {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
analogWrite(buzzer, LOW);
}
delay(500);
}
duration 차이에 따라 큰 차이 못 느끼겠음..
millis() 함수 사용
//초음파 센서의 핀번호를 설정한다.
int echoPin = 12;
int trigPin = 13;
int go = 6;
unsigned long previousMillis = 0; //이전시간
const long delayTime = 500; //0.5초 대기시간
const long delayTime1 = 50;
boolean goState = false;
void sound1() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= delayTime){ //0.5초 시간이 흘렀는지 체크
previousMillis = currentMillis; //0.5초가 지나 참임으로 0.5초 지난 현재시간을 이전시간에 저장
goState=!goState; //if문이 참이니깐 0.5초 단위로 ledState 값을 반전시키면 0.5초 단위로 참/거짓됨.
digitalWrite(6, goState); //참(5V) or 거짓(0V)
}
}
void sound2() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= delayTime1){ //0.5초 시간이 흘렀는지 체크
previousMillis = currentMillis; //0.5초가 지나 참임으로 0.5초 지난 현재시간을 이전시간에 저장
goState=!goState; //0.5초 if문이 참이니깐 0.5초 단위로 ledState 값을 반전시키면 0.5초 단위로 참/거짓됨.
digitalWrite(6, goState); //참(5V) or 거짓(0V)
}
}
void sound3() {
analogWrite(go,255);
}
void setup() {
Serial.begin(9600);
// trig를 출력모드로 설정, echo를 입력모드로 설정
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(go, OUTPUT);
}
void loop() {
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// echoPin 이 HIGH를 유지한 시간을 저장 한다.
unsigned long duration = pulseIn(echoPin, HIGH);
// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
float distance = ((float)(340 * duration) / 10000) / 2;
Serial.print(distance);
Serial.println("cm");
// 수정한 값을 출력
if ((distance <=30)&&(distance>20) ) {
sound1();
}
else if ((distance <=20)&&(distance>10)){
sound2();
}
else if ((distance <=10)&&(distance>0)) {
sound3();
}
else {
(noTone(go));
}
}
'project > 2020.12-02 (라즈베리파이) 눈으로운전하는휠체어' 카테고리의 다른 글
라즈베리파이 웹캠 연결 (0) | 2020.12.24 |
---|---|
rc카 조립 (0) | 2020.12.23 |
opencv 설치 (0) | 2020.12.20 |
웹캠으로 눈동자 인식 (0) | 2020.12.20 |
라즈베리파이 프로젝트 일정 (0) | 2020.11.30 |