BASIC4MCU | 질문게시판 | 답변 : 장애물 피하는 라인트레이싱rc카->꼭 확인후도움부탁드려요
페이지 정보
작성자 master 작성일2018-12-08 17:35 조회6,275회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6560
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-08 오후 5:39:29// by Ok-Hyun Park//#include <Ultrasonic.h>#include "myheader.h"// 회전 방향#define CW 1 // clockwise#define CCW 0 // counter-clockwise// 왼쪽,오른쪽 바퀴#define MOTOR_LEFT 0#define MOTOR_RIGHT 1// motor POWER settingconst char DEFAULT_POWER=70;// 아두이노 PIN 설정const byte PWMA=3,DIRA=12;const byte PWMB=11,DIRB=13;// motion 설정const char F=1,B=2,R=3,L=4,S=5;// color 설정const char BLACK=0,WHITE=1;//int sensor0,sensor1;int leftSensorColor,rightSensorColor;int powerLeft=DEFAULT_POWER,powerRight=DEFAULT_POWER;int command;int ultraSensorValue;Ultrasonic ultrasonic(10,2);//void setup(){Serial.begin(9600);ultrasonic.setTimeout(40000UL);//pinMode(PWMA,OUTPUT); pinMode(PWMB,OUTPUT); pinMode(DIRA,OUTPUT); pinMode(DIRB,OUTPUT); // setupArdumoto}//void loop(){sensorsRead();if(ultraSensorValue<20){ robotAvoid(); }else{if (leftSensorColor==BLACK&&rightSensorColor==BLACK){ robotForward(80,80); }else if(leftSensorColor==WHITE&&rightSensorColor==WHITE){ robotStop(); }else if(leftSensorColor==WHITE&&rightSensorColor==BLACK){ robotRight(80,80); }else if(leftSensorColor==BLACK&&rightSensorColor==WHITE){ robotLeft(80,80); }}}//-------------------void robotAvoid(){robotStop(); delay( 500);robotLeft(80,90); delay( 300);robotForward(80,80); delay(1200);robotForward(100,60); delay(3000);}//void sensorsRead(){readSensors();leftSensorColor=colorFinder(sensor0); Serial.println(leftSensorColor);rightSensorColor=colorFinder(sensor1); Serial.println(rightSensorColor);ultraSensorValue=ultrasonic.read(); Serial.println(ultraSensorValue);Serial.println();}//void sendCommand(){if (leftSensorColor==BLACK&&rightSensorColor==BLACK&&finalpad==0){ command=F; }else if(leftSensorColor==WHITE&&rightSensorColor==WHITE&&finalpad==0){ command=S; }else if(leftSensorColor==WHITE&&rightSensorColor==BLACK&&finalpad==0){ command=R; }else if(leftSensorColor==BLACK&&rightSensorColor==WHITE&&finalpad==0){ command=L; }}//char colorFinder(int sensorValue){char color; const int threshold=860;if(sensorValue>threshold)color=WHITE; else color=BLACK;return color;}//void motionControl(int command){switch(command){case F: robotForward(powerLeft,powerRight); break;case B: robotBackward(powerLeft,powerRight); break;case R: robotRight(powerLeft,powerRight); break;case L: robotLeft(powerLeft,powerRight); break;case S: robotStop(); break;default: robotStop();}}//void readSensors(){const int OFFSET=1024;Serial.println("sensor read");sensor0=1024-analogRead(A0); Serial.println(sensor0); //왼쪽센서sensor1=1024-analogRead(A1); Serial.println(sensor1);}//void displayValues(int val1,int val2,int finalpad){Serial.print("val1: "); Serial.print(val1); Serial.print(","); //왼쪽 센서Serial.print("val2: "); Serial.print(val2); Serial.print(","); //오른쪽 센서Serial.print("finalpad: "); Serial.println(finalpad);}//void stopArdumoto(byte motor){ driveArdumoto(motor,0,0); }//void driveArdumoto(byte motor,byte dir,byte spd){if(motor==MOTOR_LEFT ){ digitalWrite(DIRA,dir); analogWrite(PWMA,spd); }if(motor==MOTOR_RIGHT){ digitalWrite(DIRB,dir); analogWrite(PWMB,spd); }}//void robotForward(int powerLeft,int powerRight){driveArdumoto(MOTOR_LEFT,CCW,powerLeft); driveArdumoto(MOTOR_RIGHT,CW,powerRight);}//void robotBackward(int powerLeft,int powerRight){driveArdumoto(MOTOR_LEFT,CW,powerLeft); driveArdumoto(MOTOR_RIGHT,CCW,powerRight);}//void robotRight(int powerLeft,int powerRight){driveArdumoto(MOTOR_LEFT,CCW,powerLeft); driveArdumoto(MOTOR_RIGHT,CCW,powerRight);delayMicroseconds(100);}//void robotLeft(int powerLeft,int powerRight){driveArdumoto(MOTOR_LEFT,CW,powerLeft); driveArdumoto(MOTOR_RIGHT,CW,powerRight);delayMicroseconds(100);}//void robotStop(){ stopArdumoto(MOTOR_LEFT); stopArdumoto(MOTOR_RIGHT); }
if(ultraSensorValue<20){ robotAvoid(); }문제가 된다는 코드에서 (ultraSensorValue 변수를 체크하고 있는데ultraSensorValue=ultrasonic.read();ultrasonic.read() 함수가 소스코드에는 빠져있습니다.
댓글 0
조회수 6,275등록된 댓글이 없습니다.