BASIC4MCU | 질문게시판 | 라인트레이싱 3채널 센서
페이지 정보
작성자 뚜뚜 작성일2020-11-14 16:51 조회2,914회 댓글1건첨부파일
본문
// 모터_전진컨트롤
int Left_motor_IN1 = 32; // IN1
int Right_motor_IN2 = 35; // IN2
// 모터_후진컨트롤
int Left_motor_IN3 = 33; // IN3
int Right_motor_IN4 = 37; // IN4
// 모터_속도컨트롤
int Right_PWM= 10; // 오른쪽모터 속도
int Left_PWM= 11; // 왼쪽모터 속도
// IR Sensor
const int L_Sensor = 4; // 왼쪽센서
const int M_Sensor = 3; // 중간센서
const int R_Sensor = 6; // 오른쪽센서
int L_Sensor_Value; //
int M_Sensor_Value;
int R_Sensor_Value; //
void setup()
{
pinMode(Left_motor_IN1, OUTPUT); // PIN 8
pinMode(Right_motor_IN2, OUTPUT); // PIN 9
pinMode(Left_motor_IN3, OUTPUT); // PIN 10
pinMode(Right_motor_IN4, OUTPUT); // PIN 11
pinMode(Left_PWM, OUTPUT); // PIN 5
pinMode(Right_PWM, OUTPUT); // PIN 6
pinMode(L_Sensor, INPUT); //IN1
pinMode(M_Sensor, INPUT); //IN2
pinMode(R_Sensor, INPUT); //IN3
}
// 전진
void go() {
digitalWrite(Left_motor_IN1, HIGH); // 왼쪽모터 전진_정지
digitalWrite(Right_motor_IN2, HIGH); // 오론쪽모터 전진_정지
digitalWrite(Left_motor_IN3, LOW); // 왼쪽모터 후진_회전
digitalWrite(Right_motor_IN4, LOW); // 오른쪽모터 후진_회전
analogWrite(Left_PWM, 255); // PWM값(70~255), 모터 회전속도 조절
analogWrite(Right_PWM,255); // PWM값(70~255), 모터 회전속도 조절
delay(5);
}
// 후진
void back() {
digitalWrite(Left_motor_IN1, LOW); // 왼쪽모터 전진_정지
digitalWrite(Right_motor_IN2, LOW); // 오론쪽모터 전진_정지
digitalWrite(Left_motor_IN3, HIGH); // 왼쪽모터 후진_회전
digitalWrite(Right_motor_IN4, HIGH); // 오른쪽모터 후진_회전
analogWrite(Left_PWM, 255); // PWM값(70~255), 모터 회전속도 조절
analogWrite(Right_PWM, 255); // PWM값(70~255), 모터 회전속도 조절
}
// 정지
void brake() {
digitalWrite(Left_motor_IN1, LOW); // 왼쪽모터 전진_정지
digitalWrite(Right_motor_IN2, LOW); // 오론쪽모터 전진_정지
digitalWrite(Left_motor_IN3, LOW); // 왼쪽모터 후진_정지
digitalWrite(Right_motor_IN4, LOW); // 오른쪽모터 후진_정지
delay(5);
}
// 좌회전
void turn_left(){
digitalWrite(Left_motor_IN1, LOW); // 왼쪽모터 전진_정지
digitalWrite(Right_motor_IN2, HIGH); // 오론쪽모터 전진_회전
digitalWrite(Left_motor_IN3, LOW); // 왼쪽모터 후진_정지
digitalWrite(Right_motor_IN4, LOW); // 오른쪽모터 후진_정지
analogWrite(Right_PWM, 255); // PWM값(70~255), 모터 회전속도 조절
delay(5);
}
// 우회전
void turn_right() {
digitalWrite(Left_motor_IN1, HIGH); // 왼쪽모터 전진_회전
digitalWrite(Right_motor_IN2, LOW); // 오론쪽모터 전진_정지
digitalWrite(Left_motor_IN3, LOW); // 왼쪽모터 후진_정지
digitalWrite(Right_motor_IN4, LOW); // 오른쪽모터 후진_정지
analogWrite(Left_PWM, 255); // PWM값(70~255), 모터 회전속도 조절
delay(5);
}
void loop()
{
while(1)
{
//신호가 있으면(흰색) LOW, 신호가 없으면(검은색) HIGH
R_Sensor_Value = digitalRead(R_Sensor);
M_Sensor_Value = digitalRead(M_Sensor);
L_Sensor_Value = digitalRead(L_Sensor);
// 전진: 왼쪽센서 검은색, 오른쪽센서 검은색
if (L_Sensor_Value == LOW & M_Sensor_Value == HIGH & R_Sensor_Value == LOW)
go();
// 좌회전: 왼쪽센서 검은색, 오른쪽센서 흰색
else if (L_Sensor_Value == HIGH & R_Sensor_Value == LOW)
turn_left();
// 우회전: 왼쪽센서 흰색, 오른쪽센서 검은색
else if (L_Sensor_Value == LOW & R_Sensor_Value == HIGH)
turn_right();
// 정지: 왼쪽센서 흰색, 오른쪽센서 흰색
else
brake();
}
}
코딩은 다음과 같은데 중간센서가 안읽네요 왜 그럴까요?? 동영상 첨부했습니다.
댓글 1
조회수 2,914master님의 댓글
master 작성일
if()문에서 몇개의 조건식을 체크 할 때는
AND는 && 두개를 사용해야 하는데 & 하나만 사용하고 있습니다.
이 것은 체크가 아니고 연산을 해버리기 때문에 결과가 다르게 나올 수 있습니다.
마찬가지로 OR는 || 두개를 사용합니다.