Arduino 기초 강좌
#define LED 13
#define DELAY 1000
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(DELAY);
digitalWrite(LED, LOW);
delay(DELAY);
}
setup()
: 아두이노 구동 시, 맨 처음 단 한 번 실행되는 함수
loop()
: setup()
이후 전원이 끊길 때까지 무한히 도는 함수
pinMode(pin, mode)
: 해당 핀의 입/출력 모드 결정
OUTPUT
: 출력 모드INPUT
: 입력 모드INPUT_PULLUP
: 풀업 저항이 연결된 입력 모드(저항 없이 사용할 수 있음)digitalWrite(pin, signal)
: 출력 핀에 신호(LOW
, HIGH
)를 줌
delay(ms)
: ms만큼 현 상태로 대기
스위치로 LED의 깜빡임을 제어해 볼 차례이다. 원래 스위치를 사용하려면 플로팅을 방지할 저항이 필요하지만, 아두이노에서는 INPUT_PULLUP
이라는 특수한 모드를 이용해 저항 없이 스위치를 사용할 수 있다. 단, 풀업 저항을 사용하기 때문에 눌린 상태가 LOW
, 눌리지 않은 상태가 HIGH
임을 명심해야 한다.
#define LED 13
#define BUTTON 9
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
}
void loop() {
if(digitalRead(BUTTON) == LOW) { // 버튼이 눌린 상태
digitalWrite(LED, HIGH);
}
else {
digitalWrite(LED, LOW);
}
}
digitalRead(pin)
: 해당 핀의 입력값을 확인digitalWrite()
를 이용하면 LED를 켜고 끌 수는 있지만, 밝기를 조절하거나 하는 아날로그적인 동작은 할 수 없다. 아두이노에서는 이를 해결하기 위해 PWM 기능을 제공하는데, 이 기능을 사용할 수 있도록 해주는 함수가 analogWrite()
이다. 아주 밝은 LED 여러 개를 이용한다면 무드등도 만들 수 있다. 이 때, 출력 핀이 PWM을 지원하는지(숫자 옆에 ~
표시가 붙어 있다) 확인해야 한다. 아래 예제는 LED의 밝기를 점진적으로 증가시켰다가 감소시킨다.
#define LED 9
void setup() {
// analogWrite()는 별도의 pinMode() 설정이 필요 없다
}
void loop() {
int i;
for(i=0; i<256; i++) {
analogWrite(LED, i);
delay(10);
}
for(i=255; i>=0; i--) {
analogWrite(LED, i);
delay(10);
}
}
analogWrite(pin, val)
: 해당 핀의 출력 결정. 출력은 0부터 255까지만 가능하다.아두이노의 ANALOG IN 핀을 이용하면 스위치처럼 단순히 켜고 끄는 동작 외에도 다양한 입력을 줄 수 있다. 가변 저항에 의해 소모된 전압만큼 작은 값을 입력값으로 주게 된다.
#define LED 9
#define BUTTON A5
void setup() {
}
void loop() {
int val = map(analogRead(BUTTON), 0, 1023, 0, 255);
analogWrite(LED, val);
}
analogRead(pin)
: 해당 핀의 입력값을 가져온다. 값은 0부터 1023 사이의 정수이다.map(val, origin_min, origin_max, new_min, new_max)
: val
값을 new_min
과 new_max
사이의 값으로 매핑한다.