2 분 소요

일단 간단하게 나마 코드 짜봄.. ^^;

image

이슈1 : 뒷바퀴가 맘대로 돌아서 바퀴는 직진을 하고 있으나 회전을 한다. ㅡㅜ.. 그냥 회전 바퀴를 고정 시킴 ㅡ.ㅡ;

이슈2 : 속도가 빨라서 나중에 힘들듯… 속도 컨트롤 작업 필요..(PWM을 넣어야 할듯.)

이슈3 : 이슈는 아니고 BT 로 컨트롤 하는 APP 을 만들어야 할듯.. 그래야 테스트가 용이할것으로 보임.



#define echoPin 7 // Echo Pin

#define trigPin 8 // Trigger Pin

//int maximumRange = 200; // Maximum range needed  넓은곳에서 테스트 불가하여 제거

int minimumRange = 0; // Minimum range needed

long duration; // Duration used to calculate distance

enum direction{

RIGHT = 0,

STRAIGHT,

LEFT,

STOP,

};

void setup()

{

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

Serial.begin(9600);

}

void turn(int d)

{

if(d == RIGHT)

{

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

digitalWrite(4, HIGH);

digitalWrite(5, LOW);

}

else if ( d == LEFT)

{

digitalWrite(3, HIGH);

digitalWrite(2, LOW);

digitalWrite(5, HIGH);

digitalWrite(4, LOW);

}

else if (d == STRAIGHT)

{  //for STRAIGHT

digitalWrite(3, HIGH);

digitalWrite(2, LOW);

digitalWrite(4, HIGH);

digitalWrite(5, LOW);

}else

{  //for STOP

digitalWrite(3, LOW);

digitalWrite(2, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

}

}

long check_distance(void)

{

long distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration/58.2;

Serial.println(distance);

// if (distance >= maximumRange   distance <= minimumRange)

if(distance <= minimumRange)#define echoPin 7 // Echo Pin

#define trigPin 8 // Trigger Pin

//int maximumRange = 200; // Maximum range needed

int minimumRange = 0; // Minimum range needed

long duration; // Duration used to calculate distance

enum direction{

RIGHT = 0,

STRAIGHT,

LEFT,

STOP,

BACK,

};

void setup()

{

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(13, OUTPUT);

Serial.begin(9600);

}

void turn(int d)

{

if(d == RIGHT)

{

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

digitalWrite(4, HIGH);

digitalWrite(5, LOW);

}

else if ( d == LEFT)

{

digitalWrite(3, HIGH);

digitalWrite(2, LOW);

digitalWrite(5, HIGH);

digitalWrite(4, LOW);

}

else if (d == STRAIGHT)

{  //for STRAIGHT

digitalWrite(3, HIGH);

digitalWrite(2, LOW);

digitalWrite(4, HIGH);

digitalWrite(5, LOW);

}else if (d == BACK)

{  //for STRAIGHT

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

digitalWrite(5, HIGH);

digitalWrite(4, LOW);

}

else

{  //for STOP

digitalWrite(3, LOW);

digitalWrite(2, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

}

}

long check_distance(void)

{

long distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration/58.2;

Serial.println(distance);

// if (distance >= maximumRange   distance <= minimumRange)

if (distance <= minimumRange)

return -1;

else

return distance;

}

void loop()

{

long check_dist;

// Serial.println(check_distance());

check_dist = check_distance();

if(check_dist >10)

{

digitalWrite(13, HIGH);

Serial.println(“straight”);

turn(STRAIGHT);

}

else if(check_dist >= 0 && check_dist <= 10)

{

digitalWrite(13, HIGH);

Serial.println(“turn right”);

turn(RIGHT);

} else

{

digitalWrite(13, LOW);

Serial.println(“BACK”);

turn(BACK);

}

delay(100);

}