BASIC4MCU | 질문게시판 | 답변 : 적외선 센서의 인식 속도
페이지 정보
작성자 master 작성일2019-11-16 10:52 조회3,173회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=10743
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-11-16 오전 10:51:30// by Ok-Hyun Park//#include <Servo.h>int servoPin1=12,servoPin2=11;Servo servo1;Servo servo2;//#define motor1 5#define motor2 4#define motor3 3#define motor4 2#define sensor1 A0#define sensor2 A1#define sensor3 A2#define df 6#define dc 7#define trig A3#define echo A4//int distance=0,angle=0,last_s=0,cube=0,cross=0;int volt,a,sensor_val;//void motor_control(int a,int b,int m1_speed,int m2_speed){if(a){ analogWrite(motor1,m1_speed); analogWrite(motor2, 0); }else { analogWrite(motor1, 0); analogWrite(motor2,m1_speed); }//if(b){ analogWrite(motor3,m2_speed); analogWrite(motor4, 0); }else { analogWrite(motor3, 0); analogWrite(motor4,m2_speed); }}//void setup(){pinMode(motor1,OUTPUT); pinMode(motor2,OUTPUT); pinMode(motor3,OUTPUT); pinMode(motor4,OUTPUT);pinMode(sensor1,INPUT); pinMode(sensor2,INPUT); pinMode(sensor3,INPUT);pinMode(df,OUTPUT); pinMode(dc,OUTPUT);pinMode(trig,OUTPUT); pinMode(echo,INPUT);servo1.attach(servoPin1); servo2.attach(servoPin2);}//void loop(){volt=map(analogRead(A5),0,1023,0,5000);distance=(27.61/(volt-0.1696))*1000;//-------------------------------------------------------------------------------------sensor_val=0;a=analogRead(sensor1); if(a>=110)sensor_val|=1;a=analogRead(sensor2); if(a>=110)sensor_val|=2;a=analogRead(sensor3); if(a>=110)sensor_val|=4;//-------------------------------------------------------------------------------------if(cube<4){if(distance>12){switch(sensor_val){case 0b111: motor_control(0,0,200,200); delay(1000); break; //후진case 0b010: motor_control(1,1,200,200); delay( 100); break; //전진case 0b011: motor_control(0,1,100,100); delay( 100); break; //좌회전case 0b110: motor_control(1,0,100,100); delay( 100); break; //우회전case 0b001: motor_control(0,1,100,100); last_s=1; delay( 100); break; //좌회전case 0b100: motor_control(1,0,100,100); last_s=2; delay( 100); break; //좌회전default:if (last_s==1){ motor_control(1,0,100,100); delay(100); } //좌회전else if(last_s==2){ motor_control(0,1,100,100); delay(100); } // 우회전}}else if(distance<=12){motor_control(0,0,0,0);servo2.write(90);for(angle=165; angle>=15; angle-=1.5){ servo1.write(angle); delay(15); }delay(500);servo2.write(0);for(angle=15; angle<=165; angle+=1.5){ servo1.write(angle); delay(15); }delay(500);cube=cube+1;}}//-------------------------------------------------------------------------------------switch(sensor_val){case 0b111: motor_control(0,0,200,200); delay(1000); motor_control(0,1,200,200); delay(3000); cross=cross+1; break; //후진 //회전case 0b010: motor_control(1,1,200,200); delay( 100); break; //전진case 0b011: motor_control(0,1,100,100); delay( 100); break; //좌회전case 0b110: motor_control(1,0,100,100); delay( 100); break; //우회전case 0b001: motor_control(0,1,100,100); last_s=1; delay( 100); break; //좌회전case 0b100: motor_control(1,0,100,100); last_s=2; delay( 100); break; //좌회전default:if (last_s==1){ motor_control(1,0,100,100); delay(100); } //좌회전else if(last_s==2){ motor_control(0,1,100,100); delay(100); } // 우회전}//-------------------------------------------------------------------------------------if(cross==1){if(sensor_val==0b111){ motor_control(1,0,200,200); delay(1500); cross=cross+1; }else { motor_control(0,0,200,200); delay( 300); }}else if(cross==2){digitalWrite(trig,HIGH); delayMicroseconds(10); digitalWrite(trig,LOW);long dist=pulseIn(echo,HIGH)/58.2;if(dist>4){switch(sensor_val){case 0b111: motor_control(0,0,200,200); delay(1000); break; //후진case 0b010: motor_control(1,1,200,200); delay( 100); break; //전진case 0b011: motor_control(0,1,100,100); delay( 100); break; //좌회전case 0b110: motor_control(1,0,100,100); delay( 100); break; //우회전case 0b001: motor_control(0,1,100,100); last_s=1; delay( 100); break; //좌회전case 0b100: motor_control(1,0,100,100); last_s=2; delay( 100); break; //좌회전default:if (last_s==1){ motor_control(1,0,100,100); delay(100); } //좌회전else if(last_s==2){ motor_control(0,1,100,100); delay(100); } // 우회전}}else{motor_control(0,0,0,0);analogWrite(df,150); delay(500);analogWrite(dc,150); delay(500);}}}
남이 작성한 코드라면 열심히 분석해서 이해 하도록하세요
댓글 0
조회수 3,173등록된 댓글이 없습니다.