BASIC4MCU | 질문게시판 | 답변 : 리모컨으로 모터 제어
페이지 정보
작성자 master 작성일2019-05-29 06:47 조회5,525회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8953
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-05-29 오전 6:54:08// by Ok-Hyun Park//리모컨을 사용하여재생 버튼 누르면 시스템이 오토모드로 센서가 자동적으로 돌아가게 하고C 버튼 누르면 수동모드로 바뀌면서 이후에 누르는 키에 따라서 동작하게 하고싶은데지금 상태에서는 한 번 입력이 들어가면 더이상 키를 눌러도 먹히지가 않는데 어떻게 해결해야할까요?문 여는 버튼과 불 키는 버튼은 토글식으로 하고자 합니다.문은 서보모터로,불은 LED로 설정했습니다.//#include <Servo.h>Servo servo;int trig1=7; // 차고 입구 초음파센서 trig1 핀 지정int echo1=8; // 차고 입구 초음파센서 echo1 핀 지정int trig2=2; // 차고 내부 초음파센서 trig2 핀 지정int echo2=4; // 차고 내부 초음파센서 echo2 핀 지정//#include <IRremote.h>/*FFA25D: PowerFF22DD: TestFFE21D: MenuFFC23D: BackFF02FD:+FF9867:-FFE01F:<<FF906F:>>FFA857: PlayFF6897: 0FF30CF: 1FF18E7: 2FF7A85: 3FF10EF: 4FF38C7: 5FF5AA5: 6FF42BD: 7FF4AB5: 8FF52AD: 9FFB04F: C*/decode_results results;int RECV_PIN=A0;IRrecv irrecv(RECV_PIN);//int angle=0; // 모터 동작 각도 인수int resPin=A3; // 가변저항 핀 지정int light1=5; // 복도 등int light2=6; // 차고 등//int timer=0;float duration1,distance1,duration2,distance2;int resVal,resOut;int mode='A';//void setup(){pinMode(trig1,OUTPUT); pinMode(echo1,INPUT);pinMode(trig2,OUTPUT); pinMode(echo2,INPUT);pinMode(light1,OUTPUT); pinMode(light2,OUTPUT);servo.attach(3);irrecv.enableIRIn();Serial.begin(9600);}//void loop(){if(irrecv.decode(&results)){if(results.decode_type==NEC){switch(results.value){case 0x00FFA857: mode='A'; Serial.println("Auto Mode"); break; // Play 키case 0x00FF6897: mode='0'; Serial.println("문 열림"); angle=90; servo.write(angle); break; // 0 키case 0x00FF30CF: mode='1'; Serial.println("문 닫힘"); angle= 0; servo.write(angle); break; // 1 키case 0x00FF9867: mode='2'; Serial.println("차고 점등"); digitalWrite(light1,1); break; // 2 키case 0x00FF7A85: mode='3'; Serial.println("차고 소등"); digitalWrite(light1,0); break; // 3 키case 0x00FF10EF: mode='4'; Serial.println("복도 점등"); digitalWrite(light2,1); break; // 4 키case 0x00FF38C7: mode='5'; Serial.println("복도 소등"); digitalWrite(light2,0); break; // 5 키}}}//--------------------------------------------------------------if(mode=='A'){resVal=analogRead(resPin); resOut=map(resVal,0,1023,0,1000);Serial.print("Resistor value: "); Serial.println(resOut); // 가변저항 저항값 출력digitalWrite(trig1,1); delayMicroseconds(10); digitalWrite(trig1,0); // 차고 문 초음파센서duration1=pulseIn(echo1,1); distance1=((340*duration1)/10000)/2;Serial.print("Door-Vehicle: "); Serial.print(distance1); Serial.println("cm"); // 차고 문과 차량 사이 거리//if(resOut>500&&distance1<70){ // 저항값과 초음파센서 거리값이 임계값을 만족할 때Serial.println("Open"); angle=90; servo.write(angle);digitalWrite(trig2,1); delayMicroseconds(10); digitalWrite(trig2,0); // 차고 내부 초음파 센서 동작duration2=pulseIn(echo2,1); distance2=((340*duration2)/10000)/2;Serial.print("Celling-Vehicle: "); Serial.print(distance2); Serial.println("cm"); // 차고 천장과 차량 사이 거리digitalWrite(light1,1); // 차고 점등//if(distance2<50){ // 복도에 사람 진입digitalWrite(light2,1); // 복도 점등for(timer=0; timer<=30; timer++){Serial.println(timer);delay(100); // 30초 동안 점등이지만 빠른 결과 위해 3초로 설정if(timer==30){ digitalWrite(light1,0); digitalWrite(light2,0); Serial.println("Turn off the Lights"); }}}else{ digitalWrite(light2,0); }}else{ digitalWrite(light1,0); Serial.println("Close"); angle=0; servo.write(angle); delay(10); }}//delay(1000); // 루프 속도}
댓글 1
조회수 5,525코시님의 댓글
코시 작성일
죄송한데 이 코드는 안되는거 같아요
우선 업로드하고 시리얼 모니터 켜면 계속 루프 돌면서
Resistor value: 0
Door-Vehicle: 0.00cm
Close
이 문구가 반복되고 리모컨 입력을 받아서 오토모드에서 수동모드로 바뀌는게 되지 않네요 ㅠㅠ