SlideShare a Scribd company logo
1 of 12
Arduino Part
송치원
Bluetooth 통신 연결
HC-06 Bluetooth module (Slave)
VCC : 5V에 연결
GND : GND 에 연결
TXD : D2 에 연결
RXD : D2 에 연결
#include <SoftwareSerial.h> // 1
int blueTx=2;
int blueRx=3;
SoftwareSerial BTSerial(blueTx, blueRx); // 2
void setup() {
BTSerial.begin(9600); // 3
}
void loop() {
if(BTSerial.available() > 0) { // 4
int val = BTSerial.read();
doRemote(val); // 5
}
}
1. 블루투스 연결을 통해 시리얼 통신을 수행한다. 시리얼 통신을 소프트웨어적으로 구현하기
위해 SoftwareSerial 라이브러리를 사용한다.
2. SoftwareSerial 객체로 BTSerial을 생성한다. 이 때 TXD 와 RXD가 연결된 핀번호를
입력해 준다.
3. 통신 초기화. 시리얼 통신 채널을 열고 속도를 9600 으로 지정한다.
4. 블루투스로 부터 전달되는 신호가 있는지 확인한다.
5. 전달된 신호가 있다면 그 값을 읽어 val 변수에 저장하고, 이에 따라 컨트롤 동작을 수행
한다.
#include <SoftwareSerial.h>
const char bt_name[] = "REMOTE_CAR";
const char bt_pwd[] = "9999";
int bTx=2;
int bRx=3;
SoftwareSerial BT(bTx, bRx);
bool sendMessage(String command) {
BT.print(command);
String result = BT.readString();
if(result.startsWith("OK")) return true;
return false;
}
void loop()
{
}
void setup()
{
Serial.begin(9600);
BT.begin(9600);
String settingState;
Serial.println("Processing...");
settingState = "Handshake";
if(!sendMessage("AT")) goto ERROR;
settingState = "Set Name";
if(!sendMessage(String("AT+NAME") + bt_name)) goto ERROR;
settingState = "Set Password";
if(!sendMessage(String("AT+PIN") + bt_pwd)) goto ERROR;
// 1:1200, 2:2400, 3:4800, 4:9600, 5:19200,
// 6:28400, 7:57600, 8:115200
settingState = "Set Speed";
if(!sendMessage(String("AT+BAUD4"))) goto ERROR;
Serial.print("BT_NAME : ");
Serial.println(bt_name);
Serial.print("BT_PWD : ");
Serial.println(bt_pwd);
Serial.println("BT_BAUD : 9600");
Serial.println("Setting Complete!");
return;
ERROR:
Serial.println("Setting Fail : " + settingState);
}
HC-06 모듈은 기본값으로
- 이름 : HC06
- 비밀번호 : 1234
로 설정되어 있다.
이 값을 임의로 변경하고자 할 때
AT 명령을 통해 변경할 수 있다.
- 이름변경 : AT+NAMEREMOTE_RC
- 비번변경 : AT+PIN1234
- 속도변경 : AT_BAUD4
변경에 성공하면 OK 값을 응답받게 된다.
Servo 모터 연결 (조향장치)
SG90 Micro Servo Motor
VCC (빨) : 5V에 연결
GND (갈) : GND 에 연결
SIG (주) : D8 에 연결
#include <Servo.h> // 1
#define CENTER 90
#define LEFT 50
#define RIGHT 130
int HandlePin = 8;
Servo handle; // 2
void setup() {
handle.attach(HandlePin); // 3
handle.write(CENTER); // 4
}
void loop() {
}
void doRemote(int val) {
//HANDLE
if(val == 'l') {
handle.write(LEFT); // 5
} else if(val == 'c') {
handle.write(CENTER); // 5
} else if(val == 'r') {
handle.write(RIGHT); // 5
}
}
1. Servo 라이브러리를 사용한다.
2. Servo 객체로 handle을 생성한다.
3. 연결된 핀 번호를 지정하여 서보모터를
연결한다.
4. 초기값 설정. 초기값으로 모터의 회전 위
치를 중앙(90도)에 오도록 조정한다.
5. 명령에 따라서 핸들을 왼쪽(130도) 또는
오른쪽(50도)으로 조정한다.
DC 모터 연결 (구동장치)
H-Bridge DC Motor Driver
MOTOR A / B : 모터에 연결
VCC : 전원(+)에 연결
GND : 전원(-)에 연결
A-IA : D5 에 연결
A-IB : D6 에 연결
B-IA : D10 에 연결
B-IB : D11 에 연결
int MotorPin1 = 5;
int MotorPin2 = 6;
int MotorPin3 = 10;
int MotorPin4 = 11;
void setup() {
pinMode(MotorPin1, OUTPUT); // 1
pinMode(MotorPin2, OUTPUT);
pinMode(MotorPin3, OUTPUT);
pinMode(MotorPin4, OUTPUT);
}
void loop() {
}
void doRemote(int val) {
//MOTOR
if(val == 'f') {
digitalWrite(MotorPin1, HIGH); // 2
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') {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
}
}
1. 핀모드 설정
2. 제어 신호에 따라 전진, 정지, 후진을 수
행한다.
전진 : 양 모터에 모두 정방향 신호 전달
정지 : 양 모터에 모두 LOW 값 전달
후진 : 양 모터에 모두 역방향 신호 전달
전체 회로
#include <SoftwareSerial.h>
#include <Servo.h>
#define CENTER 90
#define LEFT 50
#define RIGHT 130
int blueTx=2;
int blueRx=3;
int HandlePin = 8;
int MotorPin1 = 5;
int MotorPin2 = 6;
int MotorPin3 = 10;
int MotorPin4 = 11;
Servo handle;
SoftwareSerial BTSerial(blueTx, blueRx);
void setup() {
BTSerial.begin(9600);
handle.attach(HandlePin);
pinMode(MotorPin1, OUTPUT);
pinMode(MotorPin2, OUTPUT);
pinMode(MotorPin3, OUTPUT);
pinMode(MotorPin4, OUTPUT);
handle.write(CENTER);
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, LOW);
}
void loop() {
if(BTSerial.available() > 0) {
int val = BTSerial.read();
doRemote(val);
}
}
void doRemote(int val) {
//HANDLE
if(val == 'l') {
handle.write(LEFT);
} else if(val == 'c') {
handle.write(CENTER);
} else if(val == 'r') {
handle.write(RIGHT);
}
//MOTOR
else if(val == 'f') {
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') {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
digitalWrite(MotorPin3, LOW);
digitalWrite(MotorPin4, HIGH);
}
}
전체 소스
Mobile Part
(Android)
모바일 리모트 컨트롤러

More Related Content

Similar to 아두이노 RC카 만들기

TestSDIC2017-1(answer)
TestSDIC2017-1(answer)TestSDIC2017-1(answer)
TestSDIC2017-1(answer)Yong Heui Cho
 
Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)Yong Heui Cho
 
TestSDIC2015-1(Answer)
TestSDIC2015-1(Answer)TestSDIC2015-1(Answer)
TestSDIC2015-1(Answer)Yong Heui Cho
 
아두이노 bluetooth
아두이노 bluetooth아두이노 bluetooth
아두이노 bluetoothJungHoon Lee
 
아두이노로 배우는 피지컬 컴퓨팅(중급)
아두이노로 배우는 피지컬 컴퓨팅(중급)아두이노로 배우는 피지컬 컴퓨팅(중급)
아두이노로 배우는 피지컬 컴퓨팅(중급)gongdigi24
 
아두이노 2015-2 한동대학교 공학설계입문
아두이노 2015-2 한동대학교 공학설계입문아두이노 2015-2 한동대학교 공학설계입문
아두이노 2015-2 한동대학교 공학설계입문Sangjun Han
 
Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Yong Heui Cho
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)Yong Heui Cho
 
TestSdic2014-2(Answer)
TestSdic2014-2(Answer)TestSdic2014-2(Answer)
TestSdic2014-2(Answer)Yong Heui Cho
 

Similar to 아두이노 RC카 만들기 (9)

TestSDIC2017-1(answer)
TestSDIC2017-1(answer)TestSDIC2017-1(answer)
TestSDIC2017-1(answer)
 
Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)Test-SDIC2018-1(Answer)
Test-SDIC2018-1(Answer)
 
TestSDIC2015-1(Answer)
TestSDIC2015-1(Answer)TestSDIC2015-1(Answer)
TestSDIC2015-1(Answer)
 
아두이노 bluetooth
아두이노 bluetooth아두이노 bluetooth
아두이노 bluetooth
 
아두이노로 배우는 피지컬 컴퓨팅(중급)
아두이노로 배우는 피지컬 컴퓨팅(중급)아두이노로 배우는 피지컬 컴퓨팅(중급)
아두이노로 배우는 피지컬 컴퓨팅(중급)
 
아두이노 2015-2 한동대학교 공학설계입문
아두이노 2015-2 한동대학교 공학설계입문아두이노 2015-2 한동대학교 공학설계입문
아두이노 2015-2 한동대학교 공학설계입문
 
Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)
 
TestSdic2014-2(Answer)
TestSdic2014-2(Answer)TestSdic2014-2(Answer)
TestSdic2014-2(Answer)
 

More from Chiwon Song

20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기Chiwon Song
 
요즘 유행하는 AI 나도 해보자 (feat. CoreML)
요즘 유행하는 AI 나도 해보자 (feat. CoreML)요즘 유행하는 AI 나도 해보자 (feat. CoreML)
요즘 유행하는 AI 나도 해보자 (feat. CoreML)Chiwon Song
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POPChiwon Song
 
20210812 컴퓨터는 어떻게 동작하는가?
20210812 컴퓨터는 어떻게 동작하는가?20210812 컴퓨터는 어떻게 동작하는가?
20210812 컴퓨터는 어떻게 동작하는가?Chiwon Song
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
20200815 inversions
20200815 inversions20200815 inversions
20200815 inversionsChiwon Song
 
20191116 custom operators in swift
20191116 custom operators in swift20191116 custom operators in swift
20191116 custom operators in swiftChiwon Song
 
[20190601] 직업훈련교사_수업의실행_교안
[20190601] 직업훈련교사_수업의실행_교안[20190601] 직업훈련교사_수업의실행_교안
[20190601] 직업훈련교사_수업의실행_교안Chiwon Song
 
[20190601] 직업훈련교사_수업의실행
[20190601] 직업훈련교사_수업의실행[20190601] 직업훈련교사_수업의실행
[20190601] 직업훈련교사_수업의실행Chiwon Song
 
20190330 immutable data
20190330 immutable data20190330 immutable data
20190330 immutable dataChiwon Song
 
20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해Chiwon Song
 
20181020 advanced higher-order function
20181020 advanced higher-order function20181020 advanced higher-order function
20181020 advanced higher-order functionChiwon Song
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragmentChiwon Song
 
20180310 functional programming
20180310 functional programming20180310 functional programming
20180310 functional programmingChiwon Song
 
20171104 FRP 패러다임
20171104 FRP 패러다임20171104 FRP 패러다임
20171104 FRP 패러다임Chiwon Song
 
스크래치로 시작하는 코딩
스크래치로 시작하는 코딩스크래치로 시작하는 코딩
스크래치로 시작하는 코딩Chiwon Song
 
메이커운동과 아두이노
메이커운동과 아두이노메이커운동과 아두이노
메이커운동과 아두이노Chiwon Song
 
[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoT[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoTChiwon Song
 
[4] 아두이노와 인터넷
[4] 아두이노와 인터넷[4] 아두이노와 인터넷
[4] 아두이노와 인터넷Chiwon Song
 
[2] 아두이노 활용 실습
[2] 아두이노 활용 실습[2] 아두이노 활용 실습
[2] 아두이노 활용 실습Chiwon Song
 

More from Chiwon Song (20)

20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기20240330_고급진 코드를 위한 exception 다루기
20240330_고급진 코드를 위한 exception 다루기
 
요즘 유행하는 AI 나도 해보자 (feat. CoreML)
요즘 유행하는 AI 나도 해보자 (feat. CoreML)요즘 유행하는 AI 나도 해보자 (feat. CoreML)
요즘 유행하는 AI 나도 해보자 (feat. CoreML)
 
20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP20220716_만들면서 느껴보는 POP
20220716_만들면서 느껴보는 POP
 
20210812 컴퓨터는 어떻게 동작하는가?
20210812 컴퓨터는 어떻게 동작하는가?20210812 컴퓨터는 어떻게 동작하는가?
20210812 컴퓨터는 어떻게 동작하는가?
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
20200815 inversions
20200815 inversions20200815 inversions
20200815 inversions
 
20191116 custom operators in swift
20191116 custom operators in swift20191116 custom operators in swift
20191116 custom operators in swift
 
[20190601] 직업훈련교사_수업의실행_교안
[20190601] 직업훈련교사_수업의실행_교안[20190601] 직업훈련교사_수업의실행_교안
[20190601] 직업훈련교사_수업의실행_교안
 
[20190601] 직업훈련교사_수업의실행
[20190601] 직업훈련교사_수업의실행[20190601] 직업훈련교사_수업의실행
[20190601] 직업훈련교사_수업의실행
 
20190330 immutable data
20190330 immutable data20190330 immutable data
20190330 immutable data
 
20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해20190306 만들면서 배우는 IoT / IoT의 이해
20190306 만들면서 배우는 IoT / IoT의 이해
 
20181020 advanced higher-order function
20181020 advanced higher-order function20181020 advanced higher-order function
20181020 advanced higher-order function
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragment
 
20180310 functional programming
20180310 functional programming20180310 functional programming
20180310 functional programming
 
20171104 FRP 패러다임
20171104 FRP 패러다임20171104 FRP 패러다임
20171104 FRP 패러다임
 
스크래치로 시작하는 코딩
스크래치로 시작하는 코딩스크래치로 시작하는 코딩
스크래치로 시작하는 코딩
 
메이커운동과 아두이노
메이커운동과 아두이노메이커운동과 아두이노
메이커운동과 아두이노
 
[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoT[5] 아두이노로 만드는 IoT
[5] 아두이노로 만드는 IoT
 
[4] 아두이노와 인터넷
[4] 아두이노와 인터넷[4] 아두이노와 인터넷
[4] 아두이노와 인터넷
 
[2] 아두이노 활용 실습
[2] 아두이노 활용 실습[2] 아두이노 활용 실습
[2] 아두이노 활용 실습
 

아두이노 RC카 만들기

  • 2. Bluetooth 통신 연결 HC-06 Bluetooth module (Slave) VCC : 5V에 연결 GND : GND 에 연결 TXD : D2 에 연결 RXD : D2 에 연결
  • 3. #include <SoftwareSerial.h> // 1 int blueTx=2; int blueRx=3; SoftwareSerial BTSerial(blueTx, blueRx); // 2 void setup() { BTSerial.begin(9600); // 3 } void loop() { if(BTSerial.available() > 0) { // 4 int val = BTSerial.read(); doRemote(val); // 5 } } 1. 블루투스 연결을 통해 시리얼 통신을 수행한다. 시리얼 통신을 소프트웨어적으로 구현하기 위해 SoftwareSerial 라이브러리를 사용한다. 2. SoftwareSerial 객체로 BTSerial을 생성한다. 이 때 TXD 와 RXD가 연결된 핀번호를 입력해 준다. 3. 통신 초기화. 시리얼 통신 채널을 열고 속도를 9600 으로 지정한다. 4. 블루투스로 부터 전달되는 신호가 있는지 확인한다. 5. 전달된 신호가 있다면 그 값을 읽어 val 변수에 저장하고, 이에 따라 컨트롤 동작을 수행 한다.
  • 4. #include <SoftwareSerial.h> const char bt_name[] = "REMOTE_CAR"; const char bt_pwd[] = "9999"; int bTx=2; int bRx=3; SoftwareSerial BT(bTx, bRx); bool sendMessage(String command) { BT.print(command); String result = BT.readString(); if(result.startsWith("OK")) return true; return false; } void loop() { } void setup() { Serial.begin(9600); BT.begin(9600); String settingState; Serial.println("Processing..."); settingState = "Handshake"; if(!sendMessage("AT")) goto ERROR; settingState = "Set Name"; if(!sendMessage(String("AT+NAME") + bt_name)) goto ERROR; settingState = "Set Password"; if(!sendMessage(String("AT+PIN") + bt_pwd)) goto ERROR; // 1:1200, 2:2400, 3:4800, 4:9600, 5:19200, // 6:28400, 7:57600, 8:115200 settingState = "Set Speed"; if(!sendMessage(String("AT+BAUD4"))) goto ERROR; Serial.print("BT_NAME : "); Serial.println(bt_name); Serial.print("BT_PWD : "); Serial.println(bt_pwd); Serial.println("BT_BAUD : 9600"); Serial.println("Setting Complete!"); return; ERROR: Serial.println("Setting Fail : " + settingState); } HC-06 모듈은 기본값으로 - 이름 : HC06 - 비밀번호 : 1234 로 설정되어 있다. 이 값을 임의로 변경하고자 할 때 AT 명령을 통해 변경할 수 있다. - 이름변경 : AT+NAMEREMOTE_RC - 비번변경 : AT+PIN1234 - 속도변경 : AT_BAUD4 변경에 성공하면 OK 값을 응답받게 된다.
  • 5. Servo 모터 연결 (조향장치) SG90 Micro Servo Motor VCC (빨) : 5V에 연결 GND (갈) : GND 에 연결 SIG (주) : D8 에 연결
  • 6. #include <Servo.h> // 1 #define CENTER 90 #define LEFT 50 #define RIGHT 130 int HandlePin = 8; Servo handle; // 2 void setup() { handle.attach(HandlePin); // 3 handle.write(CENTER); // 4 } void loop() { } void doRemote(int val) { //HANDLE if(val == 'l') { handle.write(LEFT); // 5 } else if(val == 'c') { handle.write(CENTER); // 5 } else if(val == 'r') { handle.write(RIGHT); // 5 } } 1. Servo 라이브러리를 사용한다. 2. Servo 객체로 handle을 생성한다. 3. 연결된 핀 번호를 지정하여 서보모터를 연결한다. 4. 초기값 설정. 초기값으로 모터의 회전 위 치를 중앙(90도)에 오도록 조정한다. 5. 명령에 따라서 핸들을 왼쪽(130도) 또는 오른쪽(50도)으로 조정한다.
  • 7. DC 모터 연결 (구동장치) H-Bridge DC Motor Driver MOTOR A / B : 모터에 연결 VCC : 전원(+)에 연결 GND : 전원(-)에 연결 A-IA : D5 에 연결 A-IB : D6 에 연결 B-IA : D10 에 연결 B-IB : D11 에 연결
  • 8. int MotorPin1 = 5; int MotorPin2 = 6; int MotorPin3 = 10; int MotorPin4 = 11; void setup() { pinMode(MotorPin1, OUTPUT); // 1 pinMode(MotorPin2, OUTPUT); pinMode(MotorPin3, OUTPUT); pinMode(MotorPin4, OUTPUT); } void loop() { } void doRemote(int val) { //MOTOR if(val == 'f') { digitalWrite(MotorPin1, HIGH); // 2 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') { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, HIGH); } } 1. 핀모드 설정 2. 제어 신호에 따라 전진, 정지, 후진을 수 행한다. 전진 : 양 모터에 모두 정방향 신호 전달 정지 : 양 모터에 모두 LOW 값 전달 후진 : 양 모터에 모두 역방향 신호 전달
  • 10. #include <SoftwareSerial.h> #include <Servo.h> #define CENTER 90 #define LEFT 50 #define RIGHT 130 int blueTx=2; int blueRx=3; int HandlePin = 8; int MotorPin1 = 5; int MotorPin2 = 6; int MotorPin3 = 10; int MotorPin4 = 11; Servo handle; SoftwareSerial BTSerial(blueTx, blueRx); void setup() { BTSerial.begin(9600); handle.attach(HandlePin); pinMode(MotorPin1, OUTPUT); pinMode(MotorPin2, OUTPUT); pinMode(MotorPin3, OUTPUT); pinMode(MotorPin4, OUTPUT); handle.write(CENTER); digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, LOW); } void loop() { if(BTSerial.available() > 0) { int val = BTSerial.read(); doRemote(val); } } void doRemote(int val) { //HANDLE if(val == 'l') { handle.write(LEFT); } else if(val == 'c') { handle.write(CENTER); } else if(val == 'r') { handle.write(RIGHT); } //MOTOR else if(val == 'f') { 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') { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, HIGH); } } 전체 소스