BASIC4MCU | 질문게시판 | 아두이노 코드 루프관련 문의 드립니다.
페이지 정보
작성자 축복받은노을 작성일2018-06-02 21:54 조회7,907회 댓글0건본문
네이버 지식in에서 받은 코드로 돌려보았습니다.
루프문 대 로 a를 블루투스로 입력했을때 relay1이 작동하여 모터가 역으로 돌고 초음파 센서의 결과값을 통하여 받은 신호로 relay2가 작동하여 다시 모터가 정으로 작동하는것을 확인하였습니다. 그런데 다시 a를 입력하여 추가 작동을 확인하니 relay1만 작동하고 relay2로 정으로 다시 돌지 않았습니다.
쉽게말하면 a를 신호로 줬을때 1회째는 정상작동 하였는데 2번째로 a신호를 줬을때는 모터가 역방향으로만 작동하고 다시 정방향으로 돌아오지 않았습니다.
아두이노의 리셋 버튼을 눌러보고 다시 a신호를 줬을때도 결과값은 같았습니다.
이런 상황이면 어떤부분을 고쳐야 할지 답변 부탁드립니다.
아니면 루프문 아래쪽 부분에 아두이노의 리셋푸시버튼을 소프트웨어 적으로 넣으려고 하는데 어떻게 해야 할까요?
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(4,5);
//
int relay1=9,relay2=10;
int trig=2,echo=3;
//
int cnt=0,inData;
unsigned long duration;
float distance;
//
void setup(){
pinMode(relay1,OUTPUT); pinMode(relay2,OUTPUT);
pinMode(trig,OUTPUT); pinMode(echo,INPUT);
pinMode(8,OUTPUT);
BTSerial.begin(9600);
}
//
void loop(){
if(BTSerial.available()){
inData=BTSerial.read();
if(inData=='a'){ DOWN(); } //4초간 역방향으로 작동
}
//
digitalWrite(trig,HIGH); delayMicroseconds(10); digitalWrite(trig,LOW);
duration=pulseIn(echo,HIGH); distance=duration /58;
//
if(inData=='a'){
if(distance>15){
if(++cnt==100){ // 100초 동안 물체가 감지되지 않았다면 // 10초=100ms*100
digitalWrite(relay2,HIGH); delay(4000); digitalWrite(relay2,LOW); // 4초 정방향
inData=0;
}
}
else{ // 15cm 이내에 물체가 감지되면
cnt=0; inData=0;
}
}
//
delay(100); //100ms
}
//
void DOWN(){
digitalWrite(relay1,HIGH); delay(4000); digitalWrite(relay1,LOW);
}
댓글 0
조회수 7,907등록된 댓글이 없습니다.