정보나눔

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

아두이노 RC카 블루투스를 이용한 초음파센서 제어
노원석 | 2019-09-09

// 자율주행 회전값 수정본
#include <SoftwareSerial.h>
 
SoftwareSerial BTSerial(12, 13);
 
int in1 = 9;
int in2 = 6;
int in3 = 10;
int in4 = 11;
int trig = 2;
int echo = 3;
int RSpeed = 255;
int LSpeed = 255;
int Rspeed = 127;
int Lspeed = 127;
 
char data;
 
void setup() {
  BTSerial.begin(9600);
 
  Serial.begin(9600);

  pinMode(trig, OUTPUT);

  pinMode(echo, INPUT);
}
 
void loop() {


  digitalWrite(trig, LOW);

  digitalWrite(echo, LOW);

  delayMicroseconds(2);

  digitalWrite(trig, HIGH);

  delayMicroseconds(10);

  digitalWrite(trig, LOW);

 

  unsigned long duration =

    pulseIn(echo, HIGH);

  float distance = duration / 29.0 / 2.0;

 

 


  if (BTSerial.available()) {
  data = BTSerial.read();

      if (data == 'f') { //직진
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed);
    }
    if (data == 'r') { //우회전
      analogWrite(in1, 0);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, LSpeed);
    }
    if (data == 'l') { //좌회전
      analogWrite(in1, RSpeed);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, 0);
    }
    if (data == 'b') { //후진
      analogWrite(in1, 0);
      analogWrite(in2, RSpeed);
      analogWrite(in3, LSpeed);
      analogWrite(in4, 0);
    }
    if (data == 's') { //정지
      analogWrite(in1, 0);
      analogWrite(in2, 0);
      analogWrite(in3, 0);
      analogWrite(in4, 0);
    }
 
  if (data == 'x') { //정지
  Serial.println(distance);

  if (distance < 15) {
    analogWrite(in1, 0);

    analogWrite(in2, 0);

    analogWrite(in3, 0);

    analogWrite(in4, 0);

    delay(700);

 

    //후진

    analogWrite(in1, 0);

    analogWrite(in2, RSpeed);

    analogWrite(in3, LSpeed);

    analogWrite(in4, 0);

    delay(500);

 

    //좌회전

    analogWrite(in1, Rspeed);

    analogWrite(in2, 0);

    analogWrite(in3, 0);

    analogWrite(in4, 0);

    delay(800);

  }

 

  else {

    // 직진

    analogWrite(in1, RSpeed);

    analogWrite(in2, 0);

    analogWrite(in3, 0);

    analogWrite(in4, LSpeed);

  }
  }
  }
 

     }
  

 

x버튼을 누르면 자율주행모드로 전환되게 하고 싶은데 작동을 안합니다. 어떤부분이 문제인가요,

프로필사진

판다마니아 2019-09-09 17:18:38

자율주행모드로 전환하면 거리를 측정하고 거리에 맞는 동작을 계속 반복해야하는데, 위 코드는 스마트폰에서 데이터가 넘어왔을 때 1번만 동작하게 됩니다.

 

스마트폰에서 'x'가 넘어오면 그 시점에 측정 결과값에 따라 동작을 1번하게 되고 그다음에는 스마트폰에서 넘어오는 데이터가 없기때문에 다시 동작을 하지 않게 되는겁니다.

 

자율주행모드일때 거리에 맞는 동작을 반복할 수 있게 코드를 수정해보시면 좋을것 같습니다.

이전글   |    아두이노 시프트레지스터 2개를 사용해서 결합을 못하겠어요... 2019-09-09
다음글   |    아두이노 딜레이 인터럽트 질문드려요 2019-09-10