조향장치가 없는 자동차

조향장치가 없는 자동차의 경우
  • 좌/우 바퀴를 한쪽만 돌리거나 서로 반대방향으로 돌리는 방식으로 방향 조종을 수행한다.
  • 예) 탱크



아두이노 코드

  • 조향부분을 한쪽 바퀴만 돌리는 방식으로 수정



#include <SoftwareSerial.h>

#define CENTER  90
#define LEFT    50
#define RIGHT   130

int blueTx = 2;
int blueRx = 3;
int MotorPin1 = 5;
int MotorPin2 = 6;
int MotorPin3 = 10;
int MotorPin4 = 11;

int direction = CENTER;

SoftwareSerial BTSerial(blueTx, blueRx);

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600);
  pinMode(MotorPin1, OUTPUT);
  pinMode(MotorPin2, OUTPUT);
  pinMode(MotorPin3, OUTPUT);
  pinMode(MotorPin4, OUTPUT);

  digitalWrite(MotorPin1, LOW);
  digitalWrite(MotorPin2, LOW);
  digitalWrite(MotorPin3, LOW);
  digitalWrite(MotorPin4, LOW);
}

void loop() {
  if (Serial.available() > 0) {
    int val = Serial.read();
    doRemote(val);
  }
  if (BTSerial.available() > 0) {
    int val = BTSerial.read();
    doRemote(val);
  }
}

void doRemote(int val) {
  //HANDLE
  if (val == 'l') {
    direction = LEFT;
  } else if (val == 'c') {
    direction = CENTER;
  } else if (val == 'r') {
    direction = RIGHT;
  }

  //MOTOR
  else if (val == 'f') {
    if (direction == RIGHT) {
      digitalWrite(MotorPin1, HIGH);
      digitalWrite(MotorPin2, LOW);
      digitalWrite(MotorPin3, LOW);
      digitalWrite(MotorPin4, LOW);
    }
    else if (direction == LEFT) {
      digitalWrite(MotorPin1, LOW);
      digitalWrite(MotorPin2, LOW);
      digitalWrite(MotorPin3, HIGH);
      digitalWrite(MotorPin4, LOW);
    }
    else if (direction == CENTER) {
      digitalWrite(MotorPin1, HIGH);
      digitalWrite(MotorPin2, LOW);
      digitalWrite(MotorPin3, HIGH);
      digitalWrite(MotorPin4, LOW);
    }
  } else if (val == 's') {
    digitalWrite(MotorPin1, LOW);
    digitalWrite(MotorPin2, LOW);
    digitalWrite(MotorPin3, LOW);
    digitalWrite(MotorPin4, LOW);
  } else if (val == 'b') {
    if (direction == RIGHT) {
      digitalWrite(MotorPin1, LOW);
      digitalWrite(MotorPin2, HIGH);
      digitalWrite(MotorPin3, LOW);
      digitalWrite(MotorPin4, LOW);
    }
    else if (direction == LEFT) {
      digitalWrite(MotorPin1, LOW);
      digitalWrite(MotorPin2, LOW);
      digitalWrite(MotorPin3, LOW);
      digitalWrite(MotorPin4, HIGH);
    }
    else if (direction == CENTER) {
      digitalWrite(MotorPin1, LOW);
      digitalWrite(MotorPin2, HIGH);
      digitalWrite(MotorPin3, LOW);
      digitalWrite(MotorPin4, HIGH);
    }
  }
}