한 눈에 끝내는 아두이노 기초
    • 01
      1 강 - Hello, Arduino
    • 아두이노(Arduino)란?
      아두이노 연결 & 작동 확인
      부품 설명 기초
      부품 설명 - 브레드 보드
      아두이노 동작 방식
    • 02
      2 강 - LED 제어하기
    • LED 회로 구성하기
      LED 제어 코드 작성
      LED 제어 응용 1 - 반복문
      LED 2개 회로 구성하기
      LED 제어 응용 2 - 조건문
      삼색 LED 회로 구성하기
      삼색 LED 제어 코드 작성
    • 03
      3 강 - 버튼 스위치 사용하기
    • 버튼 스위치와 시리얼 통신
      스위치 신호 확인하기
      스위치로 LED 제어하기
    • 04
      4 강 - 청기 / 적기 게임 만들기
    • 청기 / 적기 게임 소개
      회로 구성하기
      삼색 LED 청색 / 적색 켜기
      스위치로 청색 / 적색 맞추기
    • 05
      5 강 - 능동 부저 사용하기
    • 능동 부저 소개
      회로 구성하기
      코드로 소리내기
      스위치 클릭하면 소리내기
      다양한 소리 함수로 만들기
    • 06
      6 강 - 숫자판(디지털 튜브) 사용하기
    • 7 segment 소개
      7 segment 에 숫자 표시하기
      4개로 이루어진 7 segment 소개
      7 Segment 4 Digit Module 로 숫자 표시하기
    버튼 스위치와 시리얼 통신
    03 3 강 - 버튼 스위치 사용하기
    버튼 스위치와 시리얼 통신

    시리얼 통신(입출력)

    아두이노에서 만든 프로그램을 업로드한 후, 아두이노 IDE에서 Serial Monitor로 여러 메시지를 확인할 때 사용하는 것이 바로 시리얼 통신입니다.

    아두이노에는 별다른 디버깅 도구가 없기 때문에, 아두이노가 생각대로 동작하지 않거나 프로그램에 문제가 생겼을 경우, 코드 곳곳에 시리얼 통신 함수를 쓰는 것으로 문제를 찾습니다.

    PC 에서는 메시지들을 시리얼 모니터에서 확인할 수 있으므로 아두이노가 잘 동작하고 있는지 확인할 수 있습니다.

    아두이노에는 시리얼 통신을 위한 함수가 기본적으로 내장되어 있고, 종류는 다음과 같습니다.

    • Serial.begin(speed) : 시리얼 통신의 전송속도를 설정합니다.

    • Serial.available() : 시리얼 포트로부터 시리얼 데이터의 바이트크기를 읽어 반환합니다.

    • Serial.flush() : 시리얼 포트안에 존재하는 데이터를 비웁니다.

    • Serial.print/println(val) : 시리얼 통신 데이터를 시리얼 포트로 ASCII 형식으로 출력합니다.

    • Serial.read() : 시리얼 통신 버퍼에서 데이터를 읽어들입니다.

    • Serial.write(val) : 데이터를 시리얼 포트에 씁니다. 데이터는 바이트 단위로 전송됩니다.

    버튼 스위치(Button Switch) 

    default

    버튼 스위치(또는 Push button)는 버튼을 눌렀을 때 전류를 흘려 아두이노에서 신호를 알 수 있습니다. 아두이노 본체 쪽에서 전기 신호를 받고 조건문을 통해 특정 코드를 작동하도록 응용합니다.

    버튼 스위치를 동작하기 위한 회로는 아래와 같습니다. 다음 스텝을 위해 지금 회로를 구성해보세요! 스위치의 방향을 처음에는 파악하기 힘든데, 브레드보드의 가운데 부분에 부품 다리 변형 없이 꽂을 수 있는 방향으로 잡으시면 됩니다.

    default

    원래 버튼 스위치를 구현하기 위한 회로는 더 복잡합니다. 풀업 또는 풀다운 저항을 사용해야 했습니다.

    하지만 누구나 쉽게 배울 수 있는 아두이노답게 각 핀별로 풀업 저항을 내장하여 위 처럼 간단한 회로 구성만으로 스위치를 구현할 수 있습니다. 코드로 풀업 모드를 설정하는 방법은 다음 스텝에서 배웁니다.

    그럼 풀업과 풀다운이 무엇인지 알아볼까요?

    그 전에 먼저 플로팅(Floating) 상태에 대해서 알아야 합니다. 일반적으로 버튼은 눌리지 않을 때와 눌렀을 때 각각 0과 1로 딱 떨어질 것으로 생각하지만 실제로는 그렇지 않습니다. 버튼을 누르지 않아도 가끔 1 값에 도달하는 문제가 있습니다.

    버튼이 눌리지 않은 상태를 0 과 1, 두 가지 상태 사이에서 방황하고 있는 상태로 인식하게 되고, 이를 플로팅 상태라고 합니다.

    단어 그대로 붕 떠 있는 상태를 의미합니다. 아두이노 쪽에서는 버튼과 연결된 것을 모르는 상태가 되어버리는 거죠.

    이런 플로팅 상태를 방지하기 위해서 풀업 또는 풀다운 저항을 사용하게 되는데, 버튼을 누르지 않았을 때 상태를 HIGH 또는 LOW로 인식하게 해줍니다.

    즉, 플로팅 상태를 방지해주는 역할을 해줍니다.

    풀업을 사용할 경우 스위치를 누르지 않은 상태를 1(HIGH) 그리고 눌렸을 때를 0(LOW) 로 인식합니다.

    풀다운을 사용할 경우 스위치를 누르지 않는 상태를 0(LOW) 그리고 눌렀을 때를 1(HIGH) 로 인식합니다.

    아두이노에는 핀 별로 풀업 저항이 내장되어 있으므로, 소프트웨어적으로 풀업(INPUT_PULLUP) 또는 풀다운(INPUT_PULLDOWN) 기능을 쉽게 구현할 수 있습니다.

    질문하기