마이크로프로세서 (아두이노)
아두이노
1. ATmega328 microcontroller
2. Input voltage: 7~12V
3. 14 Digital I/0 Pins (6 PWM outputs)
4. 6 Analog Inputs
5. 32KB Flash Memory
6. 16Mhz Clock Speed
시리얼통신
아두이노에서 디버깅과 데이터 통신 목적으로 사용함
UART : 병렬 데이터의 형태를 직렬 방식으로 전환하여 데이터를 전송하는 컴퓨터 하드웨어의 일종
실제 전송은 아스키코드를 전송함
코드
Serial.write(char 변수): char변수에 해당하는 ASCII 코드값의 문자를 출력
Serial.print(변수, BIN): 변수를 2진수로 표시
Serial.print(변수, DEC): 변수를 10진수로 표시Serial.print(변수, HEX): 변수를 16진수로 표시
Serail.available(): 시리얼 통신에 수신된 데이터가 있는지 확인. 있을 경우 true 값
Serail.read(): 시리얼 통신을 통하여 수신된 값을 읽음
isDigit(변수): 변수의 값이 ASCII 코드의 0~9의 숫자 범위에 있는지 여부를 판단. 범위에 있을 경우 true 값
pinMode(핀번호, 설정): 핀의 입출력 모드 설정. INPUT-입력, OUTPUT-출력, INPUT_PULLUP-풀업
digitalWrite(핀번호, 값): 핀에 디지털 출력. 값에 HIGH 혹은 LOW를 설정하여 출력
LCD
얇은 액정판 아래 조명을 비추는 장치로서 액정판의 전류 흐름을 제어하여 문자나 그림을 표시
입출력 핀을 이용하여 LCD 모듈에 표시하기
1. 아두이노의 5V, GND핀과 LCD 모듈의 Vcc(전압이 들어오는 부분), G핀을 연결 - 전류를 흘려주기 위해서 전류가 나오는 핀과 전류가 들어가는 GND핀을 각각 Vcc, G핀에 연결
2. LCD 모듈의 RS(RESET), E(ENABLE), D4, D5,D6, D7 핀은 LCD를 직접 제어하기 위해 필요한 핀이므로 이를 아두이노의 2,3,4,5,11,12 핀에 연결함 (RS-12, E-11, D4-5, D5-4, D6-3, D7-2)
3. potentiometer(저항)는 LCD의 밝기를 조절하는데 사용됨
코드
LiquidCrytral lcd(rs, enable, d4, d5, d6, d7): LCD 모듈이 연결된 핀 번호를 성정하여 'lcd' 란 이름으로 LCD 모듈을 설정
lcd.bigin(행,열): lcd란 이름의 LCD 모듈의 크기를 정의
lcd.clear(): LCD 모듈의 화면의 모든 표시를 지우고 커서를 왼쪽 위로 옮긴다.
lcd.home(): LCD 모듈의 커서를 왼쪽 위로 옮긴다.
lcd.setCursor(행,열): LCD 모듈의 커서를 원하는 위치로 이동
lcd.print(데이터): LCD 모듈에 데이터를 출력 (커서의 위치에서 출력됨)
lcd.init(): LCD 모듈 설정
lcd.backlight(): LCD 모듈의 백라이트를 점등
lcd.noBacklight(): LCD 모듈의 백라이트를 소등
I2C
TWI라고도 불림
SDA(data), SCL(주소) 두 선으로 통신
Master와 Slave로 구분되어 MASTER에서 통신을 주관
최대 112개의 노드를 연결 가능하고 최고 3.4Mbps의 속도
SDA, SCL 두 개의 입출력 핀만 필요
LCD 모듈을 I2C 통신으로 제어하기 위해선 PCF8574 IC를 사용
총 128개의 주소를 가지고 모듈로서 사용 가능함
I2C를 이용한 LCD 출력
1. I2C LCD 모듈과 아두이노는 전원 핀 Vcc, GND와 I2C 통신 핀 SDA, SCL이 연결되어야 함
2. I2C LCD 모듈의 Vcc -> 아두이노 5V, I2C LCD 모듈의 GND -> 아두이노 GND 연결
3. SDA -> A4, SCL -> A5 연결
LED
전기 신호를 빛으로 출력하는 반도체 소자
고효율, 반영구적 수명
가정용 실내등, 산업용 특수 등, 자동차용 전조등 및 실내등에 사용
Anode: +
Cathode: -
입출력 핀을 이용하여 LED 모듈에 표시하기
1. 청색과 적생 LED의 Anode 핀을 아두이노의 3번 5번 핀에 연결
2. Cathode 핀에 330옴 저항을 연결하여 저항의 반대쪽은 아두이노의 GND에 연결함
3. LED가 연결된 핀에 HIGH 신호가 출력될 때 LED가 점등됨
코드
pinMode(핀번호, 설정): 핀의 입출력 모드 설정. INPUT-입력, OUTPUT-출력, INPUT_PULLUP-풀업
digitalWrite(핀번호, 값): 핀에 디지털 출력. 값에 HIGH 혹은 LOW를 설정하여 출력
LED 밝기 조절: 디밍(Dimming)
LED에 입력되는 전력은 PWM을 이용하여 조절
PWM: 고속의 스위칭으로 HIGH와 LOW 신호의 비율을 조절하여 LED의 밝기, 모터의 회전등을 조절 (전력 조절)
아두이노에서 analogWrite() 명령어로 구현
3,5,6,9,10,11번 핀이 PWM 지원
RGB LED
빛의 삼원색인 빨강, 초록, 파랑 빛을 조절하여 다양한 색을 표현하는 LED
각각의 색이 0~255 단계로 조절됨
간판, 조명기구 등에 사용
모든 색이 출력될 때 백색 빛을 출력
RGB LED로 색상 표현하기
1. RGB LED는 Red, Green, Blue 세 개의 Anode 핀과 공통으로 연결된 캐소드 핀으로 구성되어 있음
2. RGB LED 단독으로 연결하려면 각 Anode 핀에 330옴의 저항을 연결
3. 저항이 내장된 모듈이라면 별도의 저항이 필요 없음
4. Red, Green, Blue 세 개의 Anode 핀을 아두이노의 3,5,6번 핀에 연결
5. RGB LED 모듈의 캐소드 핀을 아두이노의 GND에 연결
6. 만약 애노드라면 5V에 연결
코드
analogWrite(핀번호, 값): 정해진 판에 아날로그를 출력함. 값에는 0~255의 값을 넣음
FND
LED의 조합으로 숫자를 표시하는 장치
7개의 LED를 사용하기 때문에 7-segment라고도 함
숫자뿐만 아니라 간단한 기호나 16진수 까지 표현 가능
0 1 2 3 4 5 6 7 8 9 A B C D E F
공용 캐소드, 공용 애노드 사용 가능
FND 제어
1. 공용 캐소드형 FND는 3번과 8번 핀이 캐소드 핀으로 함께 연결되어 있음. 즉 FND의 3번과 8번 핀을 GND에 연결하고 나머지 핀들에 HIGH 신호를 주어 FND에 숫자를 표시
2. GND에 연결되는 3번과 8번 핀을 제외한 나머지 핀들에 FND 내의 LED의 전류를 제한하기 위해 330옴의 저항을 연결
74595 IC
직렬 신호로 입력된 데이터를 병렬 신호로 변환
FND의 8개의 LED를 켜기 위한 신호를 3개의 신호선으로 입력받아 8개의 FND 신호로 출력
shiftout() 명령어로 구현
74595를 이용한 FND 제어
1. 앞의 FND 제어와 동일한 동작을 하지만 아두이노의 입출력 핀을 절약하기 위해 74595 IC를 중간에 연결함
2. 아두이노에서는 2,3,4 세 개의 핀을 이용하여 74595 IC로 신호를 출력
3. 74595 IC의 Vcc핀에는 아두이노의 5V를, GND핀은 아두이노의 GND에 연결
4. 74595 IC에서는 DS, SHCP, STCP 판으로부터 입력된 신호를 이용하여 Q0~Q7 핀에 신호를 출력. Q0~Q7 핀을 FND의 Anode 핀에 연결
5. FND의 Cathnode 핀인 3, 8번 핀은 GND에 연결
코드
shiftOut(데이터 핀, 클럭 핀, 출력 비트 순서, 출력 값)
데이터 핀 - 비트단위로 출력될 핀 번호
클럭 핀 - 데이터가 출력될 때 토글 되는 클럭 출력에 사용할 핀 번호
출력 비트 순서 - 비트 데이터의 맨 왼쪽부터 순차적으로 출력하고자 하면 'MSBFIRST', 오른쪽부터 출력하고자 한다면 'LSBFIRST'
출력 값 - 실제 출력할 데이터. 이때 데이터는 8비트 즉 2진수 8자리의 숫자를 가짐
4-digit FND
FND 4개를 이용하여 네 자리 숫자를 표시
Common Cathode형과 Common Anode형
FND와 핀 구조는 동일하지만 각 자릿수를 선택하는 핀 추가
1. 각각의 FND에는 DIG1~DIG4 네 개의 핀이 각각의 FND의 Common Cathode로 연결되어 있다
2. 맨 왼쪽 FND를 동작시키려면 DIG1에만 LOW 신호를 준 상태에서 A~G, DP핀에 원하는 숫자를 쓰기 위한 신호를 준다
3. 마찬가지로 두 번째 FND를 동작시키려면 DIG2에만 LOW 신호를 준 후 위와 같은 방식으로 행한다.
4. DIG1~DIG4에 모두 LOW 신호를 주면 모두 같은 숫자가 표시된다
1초마다 증가하는 0~9999 숫자 표시하기
A~G, DP핀은 하나의 FND를 동작시킬 때와 같이 330옴 저항을 통하여 아두이노 2~9번 핀에 연결한다.
DIG1~DIG4를 10~13번 핀에 연결한다.
1. FND에 숫자를 표시할 때 어떤 LED를 켤지에 대한 정보를 담은 상수를 설정한다.
2. FND동작에 필요한 핀을 출력으로 설정한다.
3. DIG1~4중 하나만 점등한 뒤 해당 DIG 핀에 연결된 자릿수를 표시한다.
4. DIG1->DIG2->DIG3->DIG4 순서로 돌아가며 점등시킨다. 해당 DIG핀에 신호를 LOW 했을 때 해당 자릿수가 점등된다.
5. 빠른 시간으로 4개의 DIG핀을 제어하면 시각적으로 모든 FND가 점등된 것처럼 보인다.
millis()
현재 스케치가 시작된 이후로 경과된 시간 값을 가져온다. 1/1000 단위의 값을 갖는다
Dot matrix
여러 개의 LED가 배열되어 문자나 기호를 표시하는 장치
8X8 Dot matrix는 64개의 LED를 이용
LED를 빠르게 교차 출력하여 동시에 모든 LED가 제어되는듯한 착시를 이용
행은 2~9번 핀에 연결, 열은 10, 11, 12, A1~A5번 핀에 연결한다. 행을 연결할 때는 330옴 저항을 함께 연결한다.
열이 Cathode와 연결되어 있을 때 LOW -> 켜짐
행이 Anode와 연결되어 있을 때 HIGH -> 켜짐
Dot matrix 제어
열이 Cathode와, 행이 Anode와 연결되어있을 때
1. 행과 열에 출력에 사용할 핀을 모두 output으로 설정
2. 점등하고자 하는 열에 LOW 신호를 준 뒤에 행에 HIGH 신호를 주어 LED를 점등시킨다.
3. 열을 하나씩 증가하여 점등시킨다.
Digital input
0과 1 혹은 HIGH, LOW 두 가지 값으로 표현되는 신호
잡음에 강하고 데이터의 저장 및 처리가 용이
풀업 풀다운
외부 간섭 등에 의해 스위치가 닫혀 있어도 전류가 흐르는 현상 : floating 현상
floating 현상을 방어하기 위해 풀업, 풀다운을 사용함
디지털 신호 입력 핀에 아무것도 연결되지 않았을 때의 상태를 HIGH 혹은 LOW 신호로 만들어 안정시킴
풀업 - 스위치 OFF -> HIGH
스위치 ON -> LOW
스위치 입력
스위치를 이용하여 디지털 신호를 입력받아 스위치가 눌러졌을 때 LED를 점등시키자
1. 디지털 입출력 핀인 2번 핀으로 스위치 입력을 받는다.
2. 스위치의 한쪽을 2번 핀에 연결하고 다른 한쪽을 GND에 연결한다.
3. 스위치 입력이 없을 때 2번 핀의 상태는 HIGH 신호인지 LOW 신호인지 알 수가 없다. 그러므로 반드시 핀의 입출력 설정 때 INPUT_PULLUP 명령어를 사용하여 풀업 시켜줘야 한다.
4. 풀업을 해줬다면 스위치 입력이 없을 때 2번 핀의 상태는 HIGH, 스위치 입력이 있을 때 2번 핀의 상태는 LOW 신호이다.
1. 2번 핀을 입력으로, LED가 내장된 13번 핀을 출력으로 설정한다.
2. 2번 핀은 INPUT_PULLUP으로서 평상시에는 HIGH 상태로 유지되다가 스위치 입력이 있을 때 LOW로 변화한다.
3. 2번 핀에 LOW 신호가 입력될 때 LED를 점등시킨다.
안정적인 스위치 입력
스위치를 이용하여 디지털 신호 입력을 받아 LED를 점멸시켜보자
스위치가 천천히 닫힐 때 접점이 붙거나 떨어지는 시점에 접점이 여러 번 On/Off 되는 현상: Bouncing 현상
위의 스위치 입력에서 누르는 시간에 관계없이 동작하도록 하여 Bouncing 현상을 해결
토글 동작을 수행함
Key pad
여러 개의 스위치를 가로 세로로 연결하여 매트릭스 형태로 조합하여 여러 개의 키 입력을 받을 수 있는 부품
4X4 Key pad는 8개의 핀으로 16개의 핀을 컨트롤함
몇 번째 행에서 전류가 들어오는지만 알 수 있다.
따라서 열마다 LOW를 주어 어느 열, 행에서 전류가 들어오는지를 파악한다.
1. 행은 초기값은 INPUT_PULLUP으로 설정하고, 열은 초기값이 모두 HIGH로 설정한다.
2. HIGH로 설정된 열을 하나씩 LOW로 바꾸고 이때 각 행에 연결된 핀을 확인해 키 입력을 확인한다..
3. 만약 키 입력이 있었다면 해당하는 문자를 시리얼 통신으로 출력하고, 없으면 출력하지 않는다.
Analog Input
포텐쇼미터 (가변저항)
- 회전, 직선 변위를 감지하는 센서
- 위치에 따라 저항값이 변화함
- ADC를 이용하여 변화된 저항에 전압을 인가하여 전압의 변화를 감지
- 아날로그 핀에서 아날로그 값을 읽음. 0~5V 사이의 전압을 0~1023 사이의 값으로 표현
map(변수명, 범위 1 최솟값, 범위1 최댓값, 범위 2 최솟값, 범위2 최댓값)
변수가 0~100의 범위를 가지고 있고, 이를 50~200의 범위로 매칭 하려면
map(변수명, 0, 100, 50, 200)으로 매칭 시킬 수 있다.
int adcValue = analogRead(potentionMeterPin);
//포텐쇼미터 값을 읽음
duty = map(adcValue, 0, 1023, 0, 100);
//포텐쇼미터 값을 0~100의 범위로 변경
Cds 센서
- Cds 분말을 세라믹 기판 위에 압축하여 제작
- 빛이 강할수록 저항값이 감소
- ADC를 이용하여 변화된 저항에 전압을 인가하여 전압의 변화를 감지
- 자동 조명장치, 조도 측정 등에 사용
- 아날로그 핀에서 0~1023의 범위로 읽고 ADC값을 I2C LCD 모듈로 0~100% 범위로 출력
int adcValue; //실제 센서로부터 읽은 값 (0~1023)
int illnuminance; //현재의 밝기 (0~100)
adcValue = analogRead(CdsPin);
illnuminance = map(adcValue, 0, 1023, 100, 0)
//0,100 순서 상관 없음
LM35
- 온도 측정을 위한 센서
- 전원과 접지를 연결 하면 Vout에 0~500도까지 0.01V 단위로 전압 출력이 발생
- ADC를 이용하여 이 값을 읽어 온도를 측정
- 대게 온도는 -55~155C로 측정됨
int adcValue; //실제 센서로부터 읽은 값 (0~1023)
long temp; //현재 온도
adcValue = analogRead(LM35Pin)
//LM35의 Vout를 읽는다.
temp = (adcValue*500L) / 1024;
//온도값으로 환산. 오버플로우 방지를 위해 500L로 표시한다.
//500L의 경우 500DMF 32비트 long 형태의 숫자로 나타내 준다.
수위 측정 센서
- 디지털 센서는 만수를 감지
- 아날로그 센서는 수위를 측정
- 디지털 입력 핀 혹은 아날로그 입력 핀을 이용하여 측정
int adcValue; //실제 센서로부터 읽은 값(0~1023)
int waterLevel; //수위 (0~100)
adcValue = analogRead(waterLevelPin);
//수위 센서를 통하여 입력되는 전압을 읽는다.
waterLevel = map(adcValue, 0, waterFullAdcValue, 0, 100);
//아날로그 입력 값을 0~100의 범위로로 변경
//waterFullAdcValue == 600
아날로그 조이스틱
- X, Y 축의 움직임은 포텐쇼미터로 감지
- Z 축으로의 움직임은 디지털 스위치 입력
int xValue = analogRead(xAxisPin);
int yValue = analogRead(yAxisPin);
int zValue = dgitalRead(zAxisPin);
// X,Y,Z 축 값으로 읽는다
int xDisplay = map(xValue, 0, 1023, 6, 15);
int yDisplay = map(yValue, 0, 1023, 6, 15);
// 그래프를 그리기 위해서 X,Y 값을 조절한다.
마이크로폰 모듈
- 입력되는 소리 신호와 비례하여 아날로그 신호 출력
- 디지털 출력으로 사용할 때는 내장된 포텐쇼미터로 임계값 조절
int soundInput = analogRead(soundInputPin);
//A0번 핀에서 사운드 입력을 받는다.
int soundLevel = map(soundInput, 50, 900, 0, 7);
//노이즈 부분을 제외한 50~900의 범위로 입력받은 사운드 크기를 0~7단계로 변경
//원래는 0~1023 이지만 노이즈를 줄이기 위해 50~900으로 설정
모터 구동
스텝 모터
- 다수의 입력핀에 일정한 패턴이 있는 펄스를 순서대로 인가하면 정해진 방향과 각도만큼 움직이는 모터
- 펄스의 주파수에 따라 모터의 속도나 토크가 결정
- 아두이노나 마이크로프로세서에서 나오는 신호를 달링턴 드라이브 IC나 스텝 모터용 IC에 연결하여 사용
CW : Clock Wise 시계 방향
CCW : Counter Clock Wise 반시계 방향
포텐쇼미터를 이용하여 아날로그 입력을 받는다.
포텐쇼미터의 각도에 따라서 모터의 속도가 조절됨. 중간 위치면 stop
int potentioMeter = analogRead(potentioMeterPin);
//아날로그 핀으로 포텐쇼미터 값을 읽어옴 (0~1023)
if(potentioMeter >= 512+(stopRange/2)){
// CW로 회전시 모터를 CW방향으로 회전시킨다. (90도 이상)
motorSpeed = map(potentioMeter,512+(stopRange/2),1023,4500,1000);
//모터의 속도를 계산한다.
motorSpeedPercent = map(motorSpeed,4500,1000,1,100);
// 모터의 속도를 백분율로 변환시킨다.
clockwise();
// CW로 회전시킨다.
}
else if(potentioMeter <= 512-(stopRange/2)){
// CCW로 회전시 모터를 CW방향으로 회전시킨다. (90도 이하)
motorSpeed = map(potentioMeter,512-(stopRange/2),0,4500,1000);
//모터의 속도를 계산한다.
motorSpeedPercent = map(motorSpeed,4500,1000,1,100);
// 모터의 속도를 백분율로 변환시킨다.
counterClockwise();
// CCW로 회전시킨다.
}
else{ // 중간에 위치 했을 경우 정지시킨다.
Serial.println("Motor Stop");
motorStop();
}
}
void counterClockwise(){
// 0~7 번째 신호를 순차적으로 출력시킨다.
for(int i = 0; i < 8; i++){
motorSignalOutput(i);
delayMicroseconds(motorSpeed);
}
}
void clockwise(){
// 7~0 번째 신호를 순차적으로 출력시킨다.
for(int i = 7; i >= 0; i--){
motorSignalOutput(i);
delayMicroseconds(motorSpeed);
}
}
void motorStop(){
// 정지신호를 출력시킨다.
motorSignalOutput(8);
}
void motorSignalOutput(int out) {
// out 변수에 해당하는 모터 시그날을 출력한다.
digitalWrite(motorPin1, bitRead(steps[out], 0));
digitalWrite(motorPin2, bitRead(steps[out], 1));
digitalWrite(motorPin3, bitRead(steps[out], 2));
digitalWrite(motorPin4, bitRead(steps[out], 3));
}
서보 모터
- 기계적인 위치, 속도, 가속도 등을 제어하는 모터
- 산업용 서보 모터는 로봇의 관절, 공작 기계의 위치 제어등에 사용
- RC용 서보 모터는 RC 자동차나 RC 비행기에 사용
- 포텐쇼미터의 각도에 따라서 서보모터의 각도를 조절한다.
#include <Servo.h> //서보 모터 라이브러리
Servo motor1; // 서보모터 이름 설정
int servoMotorPin = 9; // 서보 모터 신호핀 설정
int potentioMeterPin = 0; // 포텐쇼미터 핀 설정
// 모터 각도 변수 설정
int motorAngle;
int motorAngleOld;
void setup() {
motor1.attach(servoMotorPin,600,2400); // 서보모터 설정. 0.6ms 부터 2.4ms 범위로 설정
Serial.begin(9600); // 시리얼 통신 설정
}
void loop(){
int potentioMeter = analogRead(potentioMeterPin);
// 포텐쇼미터 값을 읽어옴
motorAngle = map(potentioMeter,0,1023,0,180);
// 포텐쇼미터 값을 모터 각도로 변환
motor1.write(motorAngle);
// 모터에 각도값을 전달
if(motorAngle != motorAngleOld){
// 이전각도와 현재 각도가 같지 않으면 시리얼 모니터에 각도를 출력한다.
Serial.print("Servo Motor Angle is: ");
Serial.println(motorAngle);
}
motorAngleOld = motorAngle;
// 현재의 모터 각도를 저장한다.
delay(20);
}
DC 모터
- DC 전원을 공급받아 회전 운동으로 변환하는 장치
- 고정자, 회전자, 브러쉬 등으로 구성
- 플레밍의 왼손법칙에 의해서 발생하는 힘을 이용하여 회전
- 전류가 흐르는 방향에 따라 모터가 도는 방향이 변함
- 아두이노 신호로 동작시키기 위해선 반드시 드라이버 회로가 필요
- 모터의 속도와 방향 조절을 하려면 drive module을 사용해야 함
int potentioMeterPin = 0; // 포텐쇼미터 핀 설정
int ENAPin = 3; // enable 핀 설정
int in1Pin = 2; // in1 핀 설정
int in2Pin = 4; // in2 핀 설정
int motorPWM; // Enable pin으로 출력할 PWM 신호 변수
int motorVelocity; // 속도 표시를 위한 변수
void setup() {
Serial.begin(9600); // 시리얼 통신 설정
pinMode(ENAPin,OUTPUT); // 핀 입출력 설정
pinMode(in1Pin,OUTPUT);
pinMode(in2Pin,OUTPUT);
}
void loop(){
int potentioMeter = analogRead(potentioMeterPin);
// 포텐쇼미터 값을 읽어옴
if((potentioMeter >= 0) && (potentioMeter <=500)){
// 포텐쇼미터 아날로그 입력값이 0~500 일 때 CW로 동작
motorPWM = map(potentioMeter,500,0,0,255);
analogWrite(ENAPin,motorPWM);
// enable 핀에 PWM 펄스를 출력하여 속도 조절
digitalWrite(in1Pin, HIGH); // 모터를 CW로 회전
digitalWrite(in2Pin, LOW);
motorVelocity = map(potentioMeter,500,0,0,100);
// 모터의 회전 방향을 출력하고 백분율로 속도를 표시한다
Serial.print("CW ");
Serial.print(motorVelocity);
Serial.println(" %");
}
else if((potentioMeter >= 524) && (potentioMeter <=1023)){
// 포텐쇼미터 아날로그 입력값이 524~1023 일때 CCW로 동작
motorPWM = map(potentioMeter,254,1023,0,255);
// 포텐쇼미터 값에따라 motorPWM값을 변경한다
analogWrite(ENAPin,motorPWM);
// enable 핀에 PWM 펄스를 출력하여 속도를 조절한다.
digitalWrite(in1Pin, LOW); // 모터를 CCW로 회전
digitalWrite(in2Pin, HIGH);
motorVelocity = map(potentioMeter,254,1023,0,100);
// 모터의 회전 방향을 출력하고 백분율로 속도를 표시한다
Serial.print("CCW ");
Serial.print(motorVelocity);
Serial.println(" %");
}
else{
// 모터를 정지시킨다
analogWrite(ENAPin,0);
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, LOW);
// 모터 정지 메세지를 출력한다
Serial.println("STOP");
}
delay(100);
}
}