목원대학교 정보통신공학과 정윤수 1
제 2 강 arduino 입력, 출력 사용
목원대학교
정보통신공학과 정윤수
2013. 1학기
강의내용
Ⅰ
arduino 입력, 출력 사용목원대학교 정보통신공학과 정윤수 3
- 아두이노는 디지털 입력, 디지털 출력을 사용하는게 기본임.
- 디지털 입력이라고 하면 스위치가 눌렸는지 등을 체크하는데, 결국은 디지털 입력 단자로 5V가 감지되면 ON, 0V이면 OFF로 인식할 수 있음.
- 디지털 출력은 반대로 출력하면 5V가 나가고, 출력을 끄면 0V가 나가는 동작을 말함.
- 예를들면, 출력을 ON하면 LED가 켜지고, 출력을 OFF하면 LED가 꺼지는 동작이 될 수 있음.
- 아두이노 프로그램을 작성할 때는 늘
http://arduino.cc/en/Reference/HomePage
를 확인하면서 작성하는 것이 좋습니다. 각 함수의 쓰임새를 알고 써야 에러를 줄일 수 있음.(1) 아두이노 핀의 출력방향을 출력(out)으로 설정한다.
(2) 출력으로 설정한 핀에 출력을 ON한다. 또는 출력 지정을 OFF 한다.
위 두 원칙을 지키며 프로그램을 작성해 보도록 한다.
목원대학교 정보통신공학과 정윤수 5
기본구조
void setup() {
// 여기는 프로그램이 시작되면 딱 한번만 실행됩니다.
}
void loop() {
//여기는 반복적으로 계속 실행됩니다.
}
(1) setup() 함수
프로그램이 실행되면 딱 한번만 실행됨. 다시 리셋되어 실행되지 않는 이상 절대 다시는 실행되지 않음. 보통 초기화 작업에 많이 활용
(2) loop() 함수
setup()이 실행되고 바로 실행되는 함수인데, 알아서 반복적으로 실행됨. 한번 끝나면 다시 loop() 함수의 처음으로 돌아와 실행이 됨. 주로 제어코드는 여기에 작성을 하게 됨
예제
Int ledPin = 13; //전압이 출력될 핀번호 변수에 설정
void setup() {
// 여기는 프로그램이 시작되면 딱 한번만 실행됩니다.
pinMode(ledPin, OUTPUT); // 핀의 출력방향으로 out으로 설정, 5V를 내보낼 수 있음.
}
void loop() {
//여기는 반복적으로 계속 실행됩니다.
}
- 아두이노의 13번 핀을 출력으로 설정
- 한번 설정되면 다시 설정할 때 까지는 설정한 값이 계속 유지되므로 13번 핀은 출력 전용 포트가 되어 5V를출력하거나 끄거나 할 수 있음
목원대학교 정보통신공학과 정윤수 7
아두이노 보드의 각 핀의 위치와 기능
- 위의 그림에서 빨간색으로 표시한 부분의 핀이 디지털 입력 또는 출력으로 사용할 수 있는 핀임.
- 우측부터 0~13번까지 설정되어 있음. 0~13번 핀은 다른 기능으로도 사용할 수 있지만, 우선 디지털 입출력 기능이 기본 기능이라고 생각하면 됨
- 위의 코드에서 설정한 13번 핀은 GND라고 써있는 글씨의 바로 우측에 13번이라고 표시된 부분을 말함.
- 13번핀과 GND 사이에 LED를 넣으면 LED를 ON 또는 OFF로 할 수 있음
- 핀의 디지털 입력 출력을 설정은 꼭 한번 하여야 그 해당 핀들을 사용할 수 있음. 위에서 원칙으로 표시한 (1)룰을 반드시 지켜야 함
예제
Int ledPin = 13; //전압이 출력될 핀번호 변수에 설정
void setup() {
// 여기는 프로그램이 시작되면 딱 한번만 실행됩니다.
pinMode(ledPin, OUTPUT); // 핀의 출력방향으로 out으로 설정, 5V를 내보낼 수 있음.
}
void loop() {
//여기는 반복적으로 계속 실행됩니다.
digitalWirte(ledPin, HIGH); // 13번 핀에 5V 출력 delay (1000); // 1000ms 대기
digitalWirte(ledPin, LOW); // 13번 핀에 5V 출력 끔 delay (1000); // 1000ms 대기
}
- 13번 핀은 출력으로 지정되었으므로 loop() 함수 안에서 5V를 줬다가 끊었다가 반복하면 13번 핀에 연결된 LED 같은 것에 전원을 넣었다 뺐다 할 수 있어 마치 깜빡거리는 효과를 만들 수 있음
※ 위의 코드를 실행하면 delay()라는 함수 때문에 1초는 켜져있고 1초는 꺼지고,
다시 1초는 켜지고 1초는 꺼지는 반복 동작을 끊임없이
수행할 수 있음
목원대학교 정보통신공학과 정윤수 9
(1) 아두이노 핀의 출력방향을 출력(out)으로 설정한다.
- (1) 원칙을 위해서 사용된 함수는 pinMode(핀번호, 출력방향) - 핀번호에는 아두이노의 디지털 입출력 핀인 0~13번까지를 지정할 수 있음
- 출력방향은 출력 용이면 OUTPUT, 입력이라면 INPUT이라고 써줌.
이때 대문자로 써야 함.
(2) 출력으로 설정한 핀에 출력을 ON 한다. 또는 출력 지정을 OFF 한다.
- (2) 원칙을 위해서는 digitalWrite(핀번호, HIGH or LOW)를 사용
- pinMode로 핀의 방향을 설정하였으면 해당 핀번호에 전원을 넣었다 뺐다 함.
- HIGH 는 5V 출력을 설정하며, LOW는 0V 출력을 설정함
목원대학교 정보통신공학과 정윤수 11
예제
- 위의 그림과 같이 LED를 연결하고, 작성한 코드를 컴파일한 후 아두이노에
업로드하면 연결된 LED가 깜작이기 시작합니다.
- Delay() 함수의 값을 변화시켜 감빡이는 시간을 조절하여 여러가지로 LED의
깜빡임을 제어해보는 것도 할 수 있습니다.
- 디지털 입력을 사용하면 스위치 입력 등을 받을 수 있음 - 디지털 입력도 출력과 같음
- 단지 방향을 INPUT으로 설정하고 출력 함수인 digitalWrite()를 사용하지 않고 해당 핀으로 5V가 들어왔는지를 검사하는
digitalRead()라는 함수를 사용
목원대학교 정보통신공학과 정윤수 13
예제
int ledPin = 13; //전압이 출력될 핀번호 변수에 설정
int buttonPin = 12; // 스위치 입력 연결할 핀번호 변수에 설정 void setup()
{
// 여기는 프로그램이 시작되면 딱 한번만 실행됩니다.
pinMode(ledPin, OUTPUT); // 핀의 출력방향으로 out으로 설정, 5V를 내보낼 수 있음.
pinMode(buttonPin, INPUT); // 핀의 출력방향을 in으로 설정, 5V 입력을 받아들일 수 있음 }
void loop() {
//여기는 반복적으로 계속 실행됩니다.
digitalWirte(ledPin, HIGH); // 13번 핀에 5V 출력 delay (1000); // 1000ms 대기
digitalWirte(ledPin, LOW); // 13번 핀에 5V 출력 끔 delay (1000); // 1000ms 대기
}
- 위의 코드에서 buttonPin이라는 변수에 12번을 설정하고, pinMode() 함수를 이용하여 12번 핀을 INPUT으로 설정하였음.
※ 위의 코드를 실행하면 delay()라는 함수 때문에 1초는 켜져있고 1초는 꺼지고,
다시 1초는 켜지고 1초는 꺼지는 반복 동작을 끊임없이
수행할 수 있음
예제
- 그림과 같이 스위치를 12번핀과 5V핀 사이에 연결
- 그리고, 저항 10K 옴을 GND와 12번 핀 사이에 연결
- 스위치를 누르면 5V전압이 스위치를 통과하여 12번 핀으로 들어가 전압이 가해지고, 스위치를 띠면 12번 핀은 저항을 통해 항상 GND에 연결이되어 0V로 전압이 내려감.
목원대학교 정보통신공학과 정윤수 15
예제
int ledPin = 13; //전압이 출력될 핀번호 변수에 설정
int buttonPin = 12; // 스위치 입력 연결할 핀번호 변수에 설정 int buttonState = 0; // 버튼의 상태값 저장
void setup() {
// 여기는 프로그램이 시작되면 딱 한번만 실행됩니다.
pinMode(ledPin, OUTPUT); // 핀의 출력방향으로 out으로 설정, 5V를 내보낼 수 있음.
pinMode(buttonPin, INPUT); // 핀의 출력방향을 in으로 설정, 5V 입력을 받아들일 수 있음
}
예제
void loop() {
//여기는 반복적으로 계속 실행됩니다.
buttonState = digitalRead(buttonPin); // 12번 핀의 상태를 읽음. 5V이면 HIGH, 0V이면 LOW
if(buttonState == HIGH) {
digitalWirte(ledPin, HIGH); // 13번 핀에 5V 출력 delay (1000); // 1000ms 대기
digitalWirte(ledPin, LOW); // 13번 핀에 5V 출력 끔 delay (1000); // 1000ms 대기
} }
- digitalRead(핀번호) 함수를 호출하면 해당 핀 번호의 포트의 전압값을 얻어온다.
- 스위치가 눌렸을 때 5V가 되므로 HIGH, 스위치를 누르지 않았을 때 0V이므로 LOW를 리턴한다.
- 눌렸을 때만 HIGH가 되므로 누르고 있으면 LED는 점멸하게 됨. 스위치를 띄면 LED가 더 이상
목원대학교 정보통신공학과 정윤수 17 - 디지털 출력
pinMode(), digitalWrite()
- 디지털 입력
pinMode(), digitalRead()