znagadeon
1/24/2017 - 8:28 AM

Arduino 기초 강좌

Arduino 기초 강좌

Arduino Tutorial

Setting

  • Download Arduino sketch from official website
  • Arduino/Genuino UNO, Breadboard, etc.

Getting Started: Blink LED

#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만큼 현 상태로 대기

Digital input

스위치로 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): 해당 핀의 입력값을 확인

Analog output

digitalWrite()를 이용하면 LED를 켜고 끌 수는 있지만, 밝기를 조절하거나 하는 아날로그적인 동작은 할 수 없다. 아두이노에서는 이를 해결하기 위해 PWM 기능을 제공하는데, 이 기능을 사용할 수 있도록 해주는 함수가 analogWrite()이다. 아주 밝은 LED 여러 개를 이용한다면 무드등도 만들 수 있다. 이 때, 출력 핀이 PWM을 지원하는지(숫자 옆에 ~ 표시가 붙어 있다) 확인해야 한다. 아래 예제는 LED의 밝기를 점진적으로 증가시켰다가 감소시킨다.

  • 준비물: LED, 저항(330Ohm~2kOhm 사이)
#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 input

아두이노의 ANALOG IN 핀을 이용하면 스위치처럼 단순히 켜고 끄는 동작 외에도 다양한 입력을 줄 수 있다. 가변 저항에 의해 소모된 전압만큼 작은 값을 입력값으로 주게 된다.

  • 준비물: LED, 저항(330Ohm~2kOhm 사이), 가변 저항
#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_minnew_max 사이의 값으로 매핑한다.