본문 바로가기

아두이노/아두이노 기초

틴커캐드 아두이노 푸시버튼(스위치) 제어하기

지난 포스팅에서 브레드보드와  3색 LED RGB를 제어하는 방법을 알아보았습니다.

https://iot-lab.tistory.com/178

 

틴커캐드 아두이노 3색 RGB LED 제어하기

이전 블로그에서 브레드보드와 LED 페이드 인/페이드 아웃 (PWM) 제어하는 방법을 알아보았습니다. https://iot-lab.tistory.com/175 틴커캐드 아두이노 LED 페이드 인/페이드 아웃 제어하기(PWM 제어, 오실로

iot-lab.tistory.com

 

이번 포스팅에서는 안드로이드 디지털 입력을 사용하여 푸시 버튼을 입력값에 따라 LED를 켜고 끄는 제어를 해보도록 하겠습니다. 

사전 지식

푸시 버튼 스위치

푸시 버튼은 스위치의 한 종류이고 회로를 연결하거나 차단하는 장치입니다. 

풀업(Pull-up)과 풀다운(Pull-down)

  • 플로팅 상태 : 스위치의 상태가 HIGH(1)도 LOW(0)도 아닌 상태
  • 풀업(Pull-up) : 플로팅 상태의 값을 HIGH(1) 상태로 끌어올린 상태
  • 풀다운(Pull-down) : 플로팅 상태의 값을 LOW(0) 상태의 값으로 끌어내린 상태

스위치를 위와 같이 아두이노 핀에 단순연결할 경우 플로팅 상태가 되어 스위치를 누르더라도 인식하지 않기 때문에 풀업저항이나 풀다운 저항을 연결해줘야 합니다. 

풀업(Pull-up) 풀다운(Pull-down)
ON 0 (LOW) ON 1 (HIGH)
OFF 1 (HIGH) OFF 0 (LOW)

구성요소 목록

 

새 회로 작성

좌측 사이드바에서 Circuits 를 클릭하시고 새 회로 작성 버튼을 클릭합니다. 

Curcuits -> 새 회로 작성

아두이노 준비

우측에 부품 리스트에서 아두이노를 찾아서 위치시킵니다. 

아두이노 보드를 클릭 혹은 드래그해서 위치시키기

브레드보드 준비

오른쪽 부품 리스트에서 브레드보드를 찾아 위치시킵니다. 

브레드보드를 클릭 혹은 드래그해서 위치시키기

전원선 배선하기

전원선과 그라운드선을 배선합니다. 

핀 부분과 브레드보드에 마우스 커서를 이동시키면 연결부위가 강조되며 클릭으로 배선을 할 수 있습니다. 

1. 전원선인 아두이노 5V핀과 브레드보드의 [+]부분과 연결
2. 전원선은 오른쪽 윗부분 와이어에서 색상을 빨간색으로 변경
3. 그라운드(GND)의 아두이노 핀과 [-]부분과 연결
4. 그라운드 선은 오른쪽 윗부분 와이어의 색상을 검정색으로 변경
(선택사항) 배선 부분을 더블클릭하여 반듯하게 정리(*선택사항으로 취향에 따라 정리하시면 됩니다)

LED 와 푸시 스위치 배치하기

위 작업과 같이 3색 LED를 제어하기 위하여 저항과 함께 배선합니다. 

1. 오른쪽 부품 리스트에서 LED를 찾아 아래 그림과 같이 배치
2. 브레드보드는 세로로 연결되어 있으므로 세로로 저항을 배치
3. 저항값은 오른쪽 위의 레지스터에서 저항값을 1k 옴으로 입력 (저항은 100~1K 옴 값으로 설정하면 문제없음)
4. LED를 아두이노의 13 번핀에 아래 그림과 같이 연결
5. 오른쪽 부품 리스트에서 푸시버튼을 찾아 아래 그림과 같이 배치
6. 서로 다른 대각선의 한쪽을 [+]와 연결
7. 1번과 반대되는 대각선의 한쪽에 저항을 연결하고 저항값을 10k로 설정
8. 푸시스위치와 저항 사이를 아두이노의 2번핀과 연결

소스코드

소스코드를 아래와 같이 입력합니다. 

int buttonState = 0;

void setup()
{
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
}

void loop()
{
  // read the state of the pushbutton
  buttonState = digitalRead(2);
  // check if pushbutton is pressed. if it is, the
  // button state is HIGH
  if (buttonState == HIGH) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
  delay(10); // Delay a little bit to improve simulation performance
}

소스코드 설명

int buttonState = 0;

푸시스위치의 상태를 저장할 변수를 선언합니다. 

 

void setup()
{
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
}

setup함수에서 아두이노 핀의 모드를 설정합니다. 

푸시스위치는 출력을 하므로 OUTPUT 으로 설정합니다.

LED는 입력된 값에 따라 켜고 끄므로 INPUT 으로 설정합니다. 

 

void loop()
{
  // read the state of the pushbutton
  buttonState = digitalRead(2);

digitalRead함수를 이용하여 2번핀의 상태를 읽어들여 buttonState변수에 저장합니다. 

 

  // check if pushbutton is pressed. if it is, the
  // button state is HIGH
  if (buttonState == HIGH) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
  delay(10); // Delay a little bit to improve simulation performance
}

위에서 읽어들은 buttonState값이 HIGH이면 digitalWrite함수로 13번핀에 HIGH를 출력해 LED를 켭니다. 

buttonState값이 LOW이면 digitalWrite함수로 13번핀에 LOW를 출력해 LED를 끕니다. 

 

이제 버튼을 누르면 LED가 켜지고 버튼에서 손을 떼면 LED가 꺼지는 게 됩니다. 

다들 잘 되시나요?

 

그럼 다음에 다른 아두이노 기초 포스팅으로 돌아오겠습니다~^^