답변 : (초보)초음파센서 시니얼모니터에 0cm라고 뜹니다
페이지 정보
작성자 master 작성일18-12-20 09:35 조회7,865회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-20 오전 9:39:05
// by Ok-Hyun Park
//
int echo_i=A1,trig_i=A2;
int echo_o=A3,trig_o=A4;
//
int digit[]={10,11,12,13};
int seg[]={2,3,4,5,6,7,8,9}; //a,b,c,d,e,f,g,dp순
//
byte FND[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE4,0xFE,0xE6};
//
long t;
int status=0,cnt=0,a;
bool flag=0,check=0;
//
void setup(){
Serial.begin(9600);
pinMode(echo_i,INPUT); pinMode(trig_i,OUTPUT);
pinMode(echo_o,INPUT); pinMode(trig_o,OUTPUT);
for(int i=0;i<8;i++)pinMode(seg[i],OUTPUT);
for(int i=0;i<4;i++)pinMode(digit[i],OUTPUT);
}
//
void show_digit(int position,int number){
byte f[4];
f[0]=FND[cnt/1000];
f[1]=FND[cnt/100%10];
f[2]=FND[cnt/10%10];
f[3]=FND[cnt%10];
//
for(int i=0;i<4;i++){
for(int s=0;s<8;s++)digitalWrite(seg[7-i],(f[i]>>i)&1);
digitalWrite(digit[i],HIGH);
delay(1);
digitalWrite(digit[i],LOW);
}
}
}
//
void loop(){
if(millis()-t>100){ t=millis(); // 100ms 마다 초음파센서 측정
bool^=1;
if(bool){ // 처음엔 i 초음파센서 측정
digitalWrite(trig_i,HIGH); delayMicroseconds(10); digitalWrite(trig_i,LOW);
float distance_i=pulseIn(echo_i,HIGH)/58.2;
Serial.print(distance_i); Serial.println("cm/in");
}
else{ // 다음엔 o 초음파센서 측정
digitalWrite(trig_o,HIGH); delayMicroseconds(10); digitalWrite(trig_o,LOW);
float distance_o=pulseIn(echo_o,HIGH)/58.2;
Serial.print(distance_o); Serial.println("cm/out");
}
}
//
a=0;
if(distance_i<30)a|=1; // i 감지
if(distance_o<30)a|=2; // o 감지
//
// 감지 안된 상태에서 처음 감지
if((status==0)&&(a==1))status=1;
if((status==0)&&(a==2))status=2;
//
// i가 감지된 후에 o가 감지
if((status==1)&&(a==2)){ status=4; cnt++; }
//
// o가 감지된 후에 1가 감지
if((status==2)&&(a==1)){ status=4; cnt--; }
//
// 둘 다 감지된 후에 감지되지 않은 상태라면 초기화
if((status==4)&&(a==0))status=0;
//
show_digit();
}
초음파센서는 느립니다.
(동시에 두 개가 감지되는 일이 없도록) 물체가 천천히 지나가야 합니다.
댓글 : 0
조회수 : 7,865
등록된 댓글이 없습니다.