정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

라인트레이서랑 반대로
최장우 | 2016-12-10

라인트레이서랑 반대로 검은선 안에서는 랜덤하게 움직이다가

검은선 밖으로는 못나가게끔 하고 싶습니다.

 

#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출

//모터 PIN 설정
#define LEFT_A1 4 //왼쪽 바퀴
#define LEFT_B1 5 //왼쪽 바퀴
#define RIGHT_A2 6 //오른쪽 바퀴
#define RIGHT_B2 7 //오른쪽 바퀴

void setup() {
  Serial.begin(9600);   //시리얼모니터

  //모터 핀모드 설정
  pinMode(LEFT_A1, OUTPUT);
  pinMode(RIGHT_A2, OUTPUT);
  pinMode(LEFT_B1, OUTPUT);
  pinMode(RIGHT_B2, OUTPUT);
}

void loop() {

 

  if (analogRead(A0) < 500 && analogRead(A1) < 500 && analogRead(A2) < 500) {

    int rnd = random(0, 2);
    if (rnd == 0) {
      Serial.println("right");
      right();
    } else {
      Serial.println("left");
      left();
    }
    Serial.println("forward");
    forward();
    delay(300);
  }
  else if (analogRead(A0) > 500 && analogRead(A1) < 500 && analogRead(A2) < 500) {
    Serial.println("right");
     stop();
    backward();
    right();
  }
  else if (analogRead(A0) > 500 && analogRead(A1) > 500 && analogRead(A2) < 500) {
    Serial.println("right");
    stop();
    backward();
    right();
  }
  else if (analogRead(A0) < 500 && analogRead(A1) < 500 && analogRead(A2) > 500) {
    Serial.println("left");
    stop();
    backward();
    left();
  }
  else if (analogRead(A0) < 500 && analogRead(A1) > 500 && analogRead(A2) > 500) {
    Serial.println("left");
    stop();
    backward();
    left();
  }
  else if (analogRead(A0) < 500 && analogRead(A1) > 500 && analogRead(A2) < 500) {
      Serial.println("dope");
    stop();
    backward();
  }
  else if (analogRead(A0) > 500 && analogRead(A1) > 500 && analogRead(A2) > 500) {
    Serial.println("dope");
    stop();
    backward();
  }
}

void forward() {
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
  delay(300);
}
void backward() {
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
  delay(600);
}
void left() {
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, HIGH);
  digitalWrite(RIGHT_A2, HIGH);
  digitalWrite(RIGHT_B2, LOW);
  delay(300);
}
void right() {
  digitalWrite(LEFT_A1, HIGH);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, HIGH);
  delay(300);
}
void stop() {
  digitalWrite(LEFT_A1, LOW);
  digitalWrite(LEFT_B1, LOW);
  digitalWrite(RIGHT_A2, LOW);
  digitalWrite(RIGHT_B2, LOW);
  delay(300);
}

 

이렇게 짜보았는데 생각처럼 안되는거같습니다.

혹시 도움을 구할 수 있을까요?

적외선 센서를 사용하고있습니다.

이전글   |    아두이노 Grove 지문인식 사용 질문합니다! 2016-12-09
다음글   |    아두이노 실현 가능성 조언 부탁드립니다 2016-12-11