BASIC4MCU | 질문게시판 | 답변 : 초음파 카운트
페이지 정보
작성자 master 작성일2022-12-09 11:56 조회2,066회 댓글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 piezo8=8;
int piezo9=9;
//
int numTones=52;//피에조 12,13번 노래
int tones[]={ //피에조 노래 연주 위에줄은 13번꺼,밑에는 12번거
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
};
int count=0;
int Stat12=0,Stat34=0;
//
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;
if(dist<10)return 1;
return 0;
}
//
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,1); digitalWrite(13,0); }
else { myservo1.write( 0); myservo2.write( 0); digitalWrite(12,0); digitalWrite(13,1); }
//
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
조회수 2,066등록된 댓글이 없습니다.