BASIC4MCU | 질문게시판 | 초음파 카운트
페이지 정보
작성자 고구만 작성일2022-12-09 10:07 조회839회 댓글0건본문
문의드립니다. 초음파 2개 통과 했을때에 카운트 되는 것까지 구동하였습니다.
count가 5이상 되었을때. 서보모터가 구동되는 것으로 현재까지 작성하였습니다.
여기서 추가로 역방향일떄, 피에조 부저가 울리는 것으로 구현하고 싶습니다.
피에조 구현은 맨 아래에 /* */에 적어두었습니다.
A가 레이다1......
풀어서 이야기 하자면, A>B, D>C는 count+!
B>A, C>D는 COUnt-1 입니다.
그이후 count가 5이상이면 서보모터가 구동됩니다.
구동한다면 check(거리)가 5cm 이하에서는 A>B. 5~10cm 에서는 B>A가 원칙으로, 5cm 이하에서 b>A의 움직임 포착/5-10에서 A>B움직임이 포착하면 부저 i가 울리게 하고 싶습니다.
같은 방식으로 check(거리)가 5cm 이하에서는 D>c. 5~10cm 에서는 c>d가 원칙으로, 5cm 이하에서 d>Ac 움직임 포착/5-10에서 c>d움직임이 포착하면 부저 j가 울리게 하고 싶습니다.
또한 count가 15가 넘어가면 일반 부저가 삐ㅣㅣㅣ하고 우는 것으로 구현하고 싶은데, 피에조가 처음이라 너무 어려운것 같아 도움을 요청합니다!
-------------------
#include <Servo.h>
Servo myservo1;
Servo myservo2;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd1(0x27,16,2);
LiquidCrystal_I2C lcd2(0x27,16,2);
int trig1=46,echo1=47;
int trig2=48,echo2=49;
int trig3=50,echo3=51;
int trig4=52,echo4=53;
int count=0;
int Stat12=0,Stat34=0;
int piezo8 = 8;
int piezo9 = 9;
int numTones = 52;//피에조 12,13번 노래
int tones[] = {415,415,391,391,349,349,391,391,233,233,246,246,246,246,415,415,391,391,349,349,391,391,391,
391,391,415,466,466,466,466,523,523,523,311,311,311,311,466,466,466,466,311,349,391,391,391,349,349,349,311,349,349,349}; //피에조 노래 연주 위에줄은 13번꺼,밑에는 12번거
void setup(){
pinMode(trig1,OUTPUT);
pinMode(echo1,INPUT);
pinMode(trig2,OUTPUT);
pinMode(echo2,INPUT);
pinMode(trig3,OUTPUT);
pinMode(echo3,INPUT);
pinMode(trig4,OUTPUT);
pinMode(echo4,INPUT);
lcd1.begin();
lcd1.backlight();
lcd2.begin();
lcd2.backlight();
myservo1.attach(2);
myservo2.attach(3);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(piezo8, OUTPUT);
pinMode(piezo9, OUTPUT);
Serial.begin(9600);
}
int check(int trig_pin, int echo_pin) {
digitalWrite(trig_pin,1);
delayMicroseconds(10);
digitalWrite(trig_pin,0);
double dura = pulseIn(echo_pin,1);
double dist = dura/58;
int check_threw = 0;
if (dist < 10){
check_threw = 1;
}
return check_threw;
}
void loop(){
int radar1 = check(trig1,echo1);
int radar2 = check(trig2,echo2);
int radar3 = check(trig3,echo3);
int radar4 = check(trig4,echo4);
Serial.print("Radar 1 : ");
Serial.println(radar1);
Serial.print("Radar 2 : ");
Serial.println(radar2);
Serial.print("Radar 3 : ");
Serial.println(radar3);
Serial.print("Radar 4 : ");
Serial.println(radar4);
Serial.println("------");
delay(50);
if (radar1 == 1 && radar2 == 0){
Serial.println("State #1");
for (int i = 0 ; i <=10; i++){
int radar2_2 = check(trig2,echo2);
if (radar2_2 == 1) {
count+=1;
delay(10);
break;
}
delay(10);
}
}
else if (radar1 == 0 && radar2 == 1){
Serial.println("State #2");
for (int i = 0 ; i <=10; i++){
int radar1_2 = check(trig1,echo1);
if (radar1_2 == 1) {
count-=1;
delay(10);
break;
}
delay(10);
}
}
if (radar3 == 1 && radar4 == 0){
Serial.println("State #3");
for (int i = 0 ; i <=15; i++){
int radar4_2 = check(trig4,echo4);
Serial.println(radar4_2);
if (radar4_2 == 1) {
count+=1;
delay(50);
break;
}
delay(50);
}
}
else if (radar3 == 0 && radar4 == 1){
Serial.println("State #4");
for (int i = 0 ; i <=15; i++){
int radar3_2 = check(trig3,echo3);
Serial.println(radar3_2);
if (radar3_2 == 1) {
count-=1;
delay(50);
break;
}
delay(50);
}
}
Serial.println(count);
if(count>5){
myservo1.write(90);
myservo2.write(90);
digitalWrite(12,HIGH);
digitalWrite(13,LOW);}
else {myservo1.write(0);
myservo2.write(0);
digitalWrite(12,LOW);
digitalWrite(13,HIGH);}
lcd1.setCursor(0,0);
lcd1.print("People ");
lcd1.setCursor(8,0);
lcd1.print(count);
lcd2.setCursor(0,0);
lcd2.print("People ");
lcd2.setCursor(8,0);
lcd2.print(count);
delay(100);
lcd1.clear();
lcd2.clear();
}
/*
for (int i =0; i < 23; i++) {
tone(piezo8, tones[i]);
delay(200);}
noTone(piezo8);
while(true){}
for (int j =24; j < 53; j++) {
tone(piezo9, tones[j]);
delay(200);}
noTone(piezo9);
while(true){}
*/
댓글 0
조회수 839등록된 댓글이 없습니다.