BASIC4MCU | 질문게시판 | 답변 : 아두이노 센서 2개를 동시에 인식해야 값을 나타내는 코딩 방법을 알고 싶습니다.
페이지 정보
작성자 master 작성일2020-08-31 11:54 조회33,488회 댓글3건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2020-08-31 오후 12:02:35// by Ok-Hyun Park//#include <Wire.h>#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2);//int TRIG1= 9,ECHO1= 8;int TRIG2=10,ECHO2=11;int LED1=5,LED2=6,LED3=4;//int m_cds=0;long duration1,distance1;long duration2,distance2;//void setup(){Serial.begin(9600);pinMode(TRIG1,OUTPUT); pinMode(ECHO1,INPUT);pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT);lcd.begin(); lcd.backlight();}//int cost=0;//void loop(){digitalWrite(TRIG1,1); delayMicroseconds(10); digitalWrite(TRIG1,0);duration1=pulseIn(ECHO1,1); distance1=duration1*17/1000; Serial.println(distance1);delay(100);//digitalWrite(TRIG2,1); delayMicroseconds(10); digitalWrite(TRIG2,0);duration2=pulseIn(ECHO2,1); distance2=duration2*17/1000; Serial.println(distance2);//if((distance1>50)&&(distance2>50)){ // 센서 2개 모두 50cm를 넘으면digitalWrite(LED1,1); digitalWrite(LED2,0);lcd.setCursor(0,0); lcd.print(cost); lcd.print(" WON ");cost+=10;}else{digitalWrite(LED1,0); digitalWrite(LED2,1);lcd.setCursor(0,0); lcd.print("Waiting ");cost=0;}digitalWrite(LED3,1); delay(500); digitalWrite(LED3,0); delay(400);}
댓글 3
조회수 33,488따치님의 댓글
따치 작성일감사합니다^^
따치님의 댓글
따치
지금 알려주신 코딩으로 해봤는데 안되서 바꾸고 바꾸다가
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2020-08-31 오후 12:02:35
// by Ok-Hyun Park
//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//
int TRIG1= 9,ECHO1= 8;
int TRIG2=10,ECHO2=11;
int LED1=5,LED2=6,LED3=4;
//
int m_cds=0;
long duration1,distance1;
long duration2,distance2;
//
void setup(){
Serial.begin(9600);
pinMode(TRIG1,OUTPUT); pinMode(ECHO1,INPUT);
pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT);
lcd.begin(); lcd.backlight();
}
//
int cost=0;
//
void loop(){
digitalWrite(TRIG1,1); delayMicroseconds(10); digitalWrite(TRIG1,0);
duration1=pulseIn(ECHO1,1); distance1=duration1*17/1000; //Serial.println(distance1); Serial.println("cm");
//
digitalWrite(TRIG2,1); delayMicroseconds(10); digitalWrite(TRIG2,0);
duration2=pulseIn(ECHO2,1); distance2=duration2*17/1000; //Serial.println(distance2); Serial.println("cm");
//
if((distance1 < 200) && distance2 < 200){
digitalWrite(LED1,1); digitalWrite(LED2,0);
lcd.setCursor(0,0); lcd.print(cost); lcd.print("WON");
cost+=10;
Serial.println("입차됨");
delay(1000);
}
else{
digitalWrite(LED1,0); digitalWrite(LED2,1);
lcd.setCursor(0,0); lcd.print("Waiting");
cost=0;
}
// digitalWrite(LED3,1); delay(500); digitalWrite(LED3,0); delay(400);
}
이 코딩으로 실행해보고 있는데 센서 하나만 인식을 하고 다른 하나는 계속 ON상태 인 것 같습니다.
코딩을 추가해야되거나 변경해야될 것 같은데 인터넷 검색해도 잘 모르겠네요 ㅠㅠ
그리고
digitalWrite(TRIG1,1); delayMicroseconds(10); digitalWrite(TRIG1,0);
duration1=pulseIn(ECHO1,1); distance1=duration1*17/1000; //Serial.println(distance1); Serial.println("cm");
//
digitalWrite(TRIG2,1); delayMicroseconds(10); digitalWrite(TRIG2,0);
duration2=pulseIn(ECHO2,1); distance2=duration2*17/1000; //Serial.println(distance2); Serial.println("cm");
//
if((distance1 < 200) && distance2 < 200){
digitalWrite(LED1,1); digitalWrite(LED2,0);
lcd.setCursor(0,0); lcd.print(cost); lcd.print("WON");
TRIG1, 1 에 뒤에 1번 TRIG1, 0 뒤에 0번이 무엇을 의미하는 지 잘 모르겠습니다
master님의 댓글
master 작성일
digitalWrite(TRIG2,1); digitalWrite(TRIG2,0);
pulseIn(ECHO2,1)
digitalWrite(LED1,1); digitalWrite(LED2,0);
우측의 1은 HIGH, 0은 LOW 입니다.
//
초음파센서를 읽은 후에는 최소 50ms 이상의 딜레이를 가져야합니다.
100ms 이상의 딜레이를 가지면 더욱 좋습니다.
딜레이가 없거나 짧은 경우 먼거리에서 반사되는 에코신호의 오동작으로 거리값의 오차가 발생합니다.