2 분 소요

line tracer sensor check


#define LEFT 10

#define CENTER 11

#define RIGHT 12

void setup()

{

pinMode(LEFT, INPUT);

pinMode(CENTER, INPUT);

pinMode(RIGHT, INPUT);

Serial.begin(9600);

}

void loop()

{

int left,center,right;

left= digitalRead(LEFT);

center= digitalRead(CENTER);

right= digitalRead(RIGHT);

Serial.print(“LEFT “);Serial.print(left);

Serial.print(“ CENTER “);Serial.print(center);

Serial.print(“ RIGHT “);Serial.print(right);

Serial.println(“.”);

delay(1000);

}


result


LEFT 1 CENTER 1 RIGHT 1.

LEFT 1 CENTER 1 RIGHT 1.

LEFT 1 CENTER 1 RIGHT 1.

LEFT 1 CENTER 0 RIGHT 1.

LEFT 1 CENTER 0 RIGHT 1.

LEFT 1 CENTER 1 RIGHT 0.

LEFT 1 CENTER 1 RIGHT 0.

LEFT 0 CENTER 1 RIGHT 1.


sample code : 오른쪽 왼쪽 정면 check 해서 라인을 중간으로 만들어서 계속 가는 코드.


#define SPEED 80  // you can use from 0 ~ 256

//we can use below port number, becuase they can support PWM signal.

#define Motor_right_0 3

#define Motor_right_1 5

#define Motor_left_0 6

#define Motor_left_1 9

#define LEFT_P 10

#define CENTER_P 11

#define RIGHT_P 12

enum direction{

RIGHT = 0,

STRAIGHT,

LEFT,

STOP,

BACK,

};

void setup()

{

pinMode(LEFT_P, INPUT);

pinMode(CENTER_P, INPUT);

pinMode(RIGHT_P, INPUT);

pinMode(Motor_right_0, OUTPUT);

pinMode(Motor_right_1, OUTPUT);

pinMode(Motor_left_0, OUTPUT);

pinMode(Motor_left_1, OUTPUT);

Serial.begin(9600);

}

void turn(int d)

{

#if 0

if(d == RIGHT)

{

analogWrite(Motor_right_0, SPEED);

digitalWrite(Motor_right_1, LOW);

analogWrite(Motor_left_0, SPEED);

digitalWrite(Motor_left_1, LOW);

}

else if ( d == LEFT)

{

analogWrite(Motor_right_1, SPEED);

digitalWrite(Motor_right_0, LOW);

analogWrite(Motor_left_1, SPEED);

digitalWrite(Motor_left_0, LOW);

}

else if (d == STRAIGHT)

{  //for STRAIGHT

analogWrite(Motor_right_1, SPEED);

digitalWrite(Motor_right_0, LOW);

analogWrite(Motor_left_0, SPEED);

digitalWrite(Motor_left_1, LOW);

}

#else

if(d == RIGHT)

{

analogWrite(Motor_right_1, SPEED/2);

digitalWrite(Motor_right_0, LOW);

analogWrite(Motor_left_0, SPEED);

digitalWrite(Motor_left_1, LOW);

}

else if ( d == LEFT)

{

analogWrite(Motor_right_1, SPEED);

digitalWrite(Motor_right_0, LOW);

analogWrite(Motor_left_0, SPEED/2);

digitalWrite(Motor_left_1, LOW);

}

else if (d == STRAIGHT)

{  //for STRAIGHT

analogWrite(Motor_right_1, SPEED);

digitalWrite(Motor_right_0, LOW);

analogWrite(Motor_left_0, SPEED);

digitalWrite(Motor_left_1, LOW);

}

#endif

else if (d == BACK)

{  //for STRAIGHT

analogWrite(Motor_right_0, SPEED);

digitalWrite(Motor_right_1, LOW);

analogWrite(Motor_left_1, SPEED);

digitalWrite(Motor_left_0, LOW);

}

else

{  //for STOP

digitalWrite(Motor_right_1, LOW);

digitalWrite(Motor_right_0, LOW);

digitalWrite(Motor_left_0, LOW);

digitalWrite(Motor_left_1, LOW);

}

}

int check_direction(void)

{

int left,center,right;

left= digitalRead(LEFT_P);

center= digitalRead(CENTER_P);

right= digitalRead(RIGHT_P);

if(left == 1 && center == 0 && right == 1)

return STRAIGHT;

else if(left == 0 && center == 1 && right == 1)

return RIGHT;

else if(left == 1 && center == 1 && right == 0)

return LEFT;

else

return STOP;

}

void loop()

{

int direct = 0;

#if 0

Serial.print(“LEFT “);Serial.print(left);

Serial.print(“ CENTER “);Serial.print(center);

Serial.print(“ RIGHT “);Serial.print(right);

Serial.println(“.”);

#endif

direct = check_direction();

Serial.print(“direction[left 2][straight 1][right 0]”);Serial.print(direct);

if(direct == LEFT)

{

Serial.println(“turn right”);

turn(RIGHT);

}

else if(direct == STRAIGHT)

{

Serial.println(“go straight”);

turn(STRAIGHT);

}

else if(direct == RIGHT)

{

Serial.println(“turn left”);

turn(LEFT);

}

else

{

Serial.println(“stop”);

turn(STOP);

}

delay(500);

}


result


direction[left 2][straight 1][right 0][2]turn right

direction[left 2][straight 1][right 0][2]turn right

direction[left 2][straight 1][right 0][2]turn right

direction[left 2][straight 1][right 0][0]turn left

direction[left 2][straight 1][right 0][0]turn left

direction[left 2][straight 1][right 0][1]go straight