- 좌/우 바퀴를 한쪽만 돌리거나 서로 반대방향으로 돌리는 방식으로 방향 조종을 수행한다.
- 예) 탱크
아두이노 코드
- 조향부분을 한쪽 바퀴만 돌리는 방식으로 수정
#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);
}
}
}