본문 바로가기
로보틱스/아두이노

#2 디지털 핀 입출력(Spaceship Interface)

by J-Build 2020. 10. 12.

이번 시간엔 아두이노(Arduino)의 디지털(digital) 핀(Pin)의 입력(Input)과 출력(Output)에 대해서 알아보겠습니다.

 

간단한 회로를 아래처럼 설계할께요. 스위치 버튼으로 입력을 받아서, 버튼이 눌렸으면 붉은색 led를 깜박거리게 하고 눌려지지 않았다면 초록색 led를 켜는 회로입니다. 버튼이 눌려졌음을 감지해서 각각 다른 일을 해야 하므로 아두이노에 간단한 조건문이 들어간 프로그램을 해주면 될것같습니다. 

 

위의 그림에서 보면 led는 디지털 3, 4, 5번에 연결되어 있고 스위치는 2번에 연결되어 있습니다. 디지털 핀은 입력 또는 출력 모드로 설정할 수 있습니다. 이 예제에서 스위치는 입력으로, led는 출력으로 설정이 됩니다. 그리고 각각의 핀은 high, low의 두가지 상태값을 가집니다. high 상태면 on의 의미를 가지며 low는 off의 의미를 가집니다. 스위치의 경우에 high는 버튼이 눌렸음을 low는 안눌렸음을 의미하고, led의 경우 high 상태면 불이 들어오고 low면 불이 꺼지게 됩니다. 참고로 저항은 led엔 220 ohm, 스위치엔 10k ohm 을 넣어주었습니다. 

 

그럼 이제 버튼의 상태에 따라 led를 제어하는 코드를 아두이노에 업로드 해주면 됩니다.

// 핀 번호를 상수화 합니다. 
const int pin_switch = 2;
const int pin_led_green = 3;
const int pin_led_red_1 = 4;
const int pin_led_red_2 = 5;

void setup() {
  // 스위치 버튼은 입력 모드로 설정하고
  pinMode(pin_switch, INPUT);
  // led들은 입력 모드로 설정하고
  pinMode(pin_led_green, OUTPUT);
  pinMode(pin_led_red_1, OUTPUT);
  pinMode(pin_led_red_2, OUTPUT);
}

void loop() {
  // 스위치의 상태값을 입력으로 받아서
  int switch_state = digitalRead(pin_switch);

  // 값이 low면, 즉, 안눌렸으면 초록불을 켜고
  if(switch_state == LOW) {
    digitalWrite(pin_led_green ,HIGH);
    digitalWrite(pin_led_red_1 ,LOW);
    digitalWrite(pin_led_red_2 ,LOW);
  }
  // 버튼이 눌렸으면 초록불을 끄고 빨간불은 깜박입니다. 
  else {
    digitalWrite(pin_led_green ,LOW);
    digitalWrite(pin_led_red_1 ,LOW);
    digitalWrite(pin_led_red_2 ,HIGH);

    // 딜레이를 조금 줘야 깜박거림이 눈에 보입니다. 
    delay(200);

    digitalWrite(pin_led_red_1 ,HIGH);
    digitalWrite(pin_led_red_2 ,LOW);
    
    // 마찬가지로 딜레이를 좀 줘야 합니다. 
    delay(200);
  }
}

 

이제 실제로 회로를 구성해보고 버튼을 눌러보겠습니다. 

 

깜박깜박 잘 되네요 ~!! 

 

 

'로보틱스 > 아두이노' 카테고리의 다른 글

#3 온도센서  (0) 2020.11.13
#1 기초회로 (Get To Know Your Project)  (0) 2020.10.08
아두이노 시작하기  (0) 2020.09.29
아두이노 스타터 키트 개봉기  (0) 2020.09.26

댓글