BASIC4MCU | 질문게시판 | 답변 : 아두이노 rc카 응용을 하고 싶은 부분이 있는데 막힘이 있어서 질문 드립니다.
페이지 정보
작성자 master 작성일2019-11-16 10:18 조회6,105회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=10742
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-11-16 오전 10:15:48// by Ok-Hyun Park//int Echo=A1,Trig=A0;int Left_motor_back=8,Left_motor_go=9,Right_motor_go=10,Right_motor_back=11;int key=7,beep=12,servopin=2,led3=3,led4=4;//int Front_Distance=0,Left_Distance=0,Right_Distance=0;int myangle,pulsewidth,val;//void setup(){Serial.begin(9600);pinMode(key,INPUT); pinMode(beep,OUTPUT);pinMode(Echo,INPUT); pinMode(Trig,OUTPUT);pinMode(servopin,OUTPUT); pinMode(led3,OUTPUT); pinMode(led4,OUTPUT);keysacn();}//void run(){ //자동차가 달릴때 설정analogWrite(Right_motor_go,100); analogWrite(Right_motor_back,0);analogWrite(Left_motor_go ,100); analogWrite(Left_motor_back ,0);}//void brake(int time){ //자동차 멈출때 설정analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,0);analogWrite(Left_motor_go ,0); analogWrite(Left_motor_back ,0);delay(time*100);}//void left(int time){ // 자동차 좌회전analogWrite(Right_motor_go,100); analogWrite(Right_motor_back,0);analogWrite(Left_motor_go , 0); analogWrite(Left_motor_back ,0);delay(time*100);}//void spin_left(int time){ //자동차 스핀 왼쪽analogWrite(Right_motor_go,100); analogWrite(Right_motor_back, 0);analogWrite(Left_motor_go , 0); analogWrite(Left_motor_back ,255);delay(time*100);}//void right(int time){ //자동차 우회전analogWrite(Right_motor_go, 0); analogWrite(Right_motor_back,0);analogWrite(Left_motor_go ,100); analogWrite(Left_motor_back ,0);delay(time*100);}//void spin_right(int time){ //자동차 스핀 우회전analogWrite(Right_motor_go, 0); analogWrite(Right_motor_back,100);analogWrite(Left_motor_go ,100); analogWrite(Left_motor_back , 0);delay(time*100);}//void back(int time){ // 자동차 후진analogWrite(Right_motor_go,0); analogWrite(Right_motor_back,100);analogWrite(Left_motor_go ,0); analogWrite(Left_motor_back ,100);delay(time*100);}//void keysacn(){int val=digitalRead(key);while(!digitalRead(key))val=digitalRead(key); // 키를 누를 때까지 대기while(digitalRead(key)){ // 키를 누르면,뗄 때까지 대기delay(10); val=digitalRead(key);if(val==HIGH){ digitalWrite(beep,HIGH); } // 키를 누르면 부저 ONelse { digitalWrite(beep,LOW ); } // 키를 누르지 않으면 부저 OFF}}//void klaxon(int time){ digitalWrite(beep,HIGH); delay(500); digitalWrite(beep,LOW); }//void light_on(int time) { digitalWrite(led3,HIGH); digitalWrite(led4,HIGH); }void light_off(int time) { digitalWrite(led3,LOW ); digitalWrite(led4,LOW ); }void light_right(int time){ digitalWrite(led3,HIGH); digitalWrite(led4,LOW ); }void light_left(int time) { digitalWrite(led3,LOW ); digitalWrite(led4,HIGH); }//float Distance_test(){ //거리 테스트digitalWrite(Trig,HIGH); delayMicroseconds(10); digitalWrite(Trig,LOW); //Trigfloat Fdistance=pulseIn(Echo,HIGH); Fdistance=Fdistance/58; //Echoreturn Fdistance;}//void servopulse(int servopin,int myangle){ //서브모터 설정pulsewidth=(myangle*10)+600;digitalWrite(servopin,HIGH); delayMicroseconds(pulsewidth); digitalWrite(servopin,LOW);delay(20-pulsewidth/1000);}//void front_detection(){ //앞쪽 장애물 감지for(int i=0; i<=5; i++)servopulse(servopin,90); //서보 90도Front_Distance=Distance_test();}//void left_detection(){ //왼쪽 장애물 감지for(int i=0; i<=15; i++)servopulse(servopin,165); //서보 175도Left_Distance=Distance_test();}//void right_detection(){for(int i=0; i<=15; i++)servopulse(servopin,15); //서보 15도Right_Distance=Distance_test();}//void loop(){front_detection();light_on(10);if(Front_Distance<20){back(2); brake(2);left_detection();right_detection();klaxon(2);//if ((Left_Distance<20)&&(Right_Distance<20)){ spin_left(0.7); }else if(Left_Distance>Right_Distance ){ light_right(10); left(5); brake(1); }else { light_left(10); right(5); brake(1); }}else{ run(); }}//빨간부분이용해서저희가 하고 싶은 부분은 후진시 부저가 끊겨서 소리나는 것과 그리고 차가 좌회전할떄 좌측 led 켜짐 우측 led켜짐 입니다.delay를 이용하여 하기는 했는데 좀 더 편리한 방법이 있을꺼 같아서 질문드립니다!!
부저는 두 군데서 제어합니다.
후진시 소리가 끊긴다는 것은
void back(int time){ // 자동차 후진
이 함수 실행 중에 부저 소리가 끊어진다는 것인가요?
LED를 딜레이 사용하고 있다는 말이 무슨 말인지
더 편리한 방법을 왜 찾는 것인지 모르겠습니다.
뭐가 불편하다는 것인가요?
댓글 0
조회수 6,105등록된 댓글이 없습니다.