[아두이노] 디지털 데이터의 입출력

김우경·2021년 4월 24일
1

아두이노

목록 보기
2/9

아두이노 우노의 입출력

디지털 입출력 핀

  • 14개 -> 0번~13번
  • 아날로그 입력핀까지 디지털로 사용해서 총 20개까지 사용 가능

아날로그 입력 핀

  • 6개 -> A0~A5까지 상수
  • 14~19까지 디지털 입출력핀으로 사용 가능

pinMode()

void pinMode(uint8_t pin, uint8_t mode)

  • pin : 사용할 pin 번호
  • mode : INPUT(default), OUTPUT, INPUT_PULLUP 중 하나
  • 반환값 : x

-> 하나의 pin을 입출력 모두 사용하려면? pinMode()를 2번 호출해야함

디지털 데이터의 입출력

디지털 데이터 입력

digitalRead()

int digitalRead(uint8_t pin)

  • 비트 단위의 데이터 입력용
  • 반환값 : 논리값 0(LOW) 또는 1(HIGH)
int pinNo = 13; // pin번호 정의

pinMode(pinNo, INPUT); // 해당 pin을 input으로 쓸건지 정의
int value = digitalRead(pinNo); // 해당 pin값 읽어오기

입력 핀의 상태

  • 3가지 상태 존재 : 0, 1, floating

floating

: 불안정하여 외부의 영향에 따라 무작위 값이 가해짐
-> 0도 1도 아닌 떠있는 상태

의 상태에서,

  • switch on -> MCU on
  • switch off -> MCU의 값은 알 수 없다
    : 전기적으로 0V 또는 5V가 들어가여 명확하게 0,1의 값을 가지는데 저항을 달지 않으면 0도 1도 아닌 floating 상태를 가진다.

    위와 같이 저항을 달아서 명확하게 -처리를 표시해줘야 floating없는 완전한 회로의 완성이 가능하다.
    -> PULL-UP 회로 또는 PULL-DOWN 회로를 구성해줘야 한다.

PULL-UP 회로

: 입력값과 상관없이 항상 default값이 논리 1인 회로

PULL-UP 회로

: 입력값과 상관없이 항상 default값이 논리 0인 회로

-> 아두이노에서의 내부 풀업 저항
: pinMode()에서 INPUT_PULLUP 옵션 사용

Bounce 현상

: 기계적 진동에 의해 버튼을 1번 눌렀는데 2번 이상 눌리는 현상

-> mechanical contact시 전기적으로 불안정하기 때문에

  • 없애기 : de-bounce
    -> 방법 1: delay를 이용해서 해당 chattering 발생 시점에 아예 값 읽지 않기
    -> 방법 2: Latch 함수 이용

디지털 데이터 출력

LED

  • 발광 다이오드
  • 극성 가짐 : 순방향으로 연결된 경우에만 불이 켜짐

    -> 흐르는 전류의 한계는 보통 20mA
    ** 정전류 회로 사용
    : V=IRV = IR
    II = 0.02A, VV= 5V일때 RR = 250Ω

digitalWrite()

void digitalWrite(uint8_t pin, uint8_t value)

  • pin : 핀번호
  • value : LOW 또는 HIGH
  • 반환값 : x

tone()

void tone(uint8_t pin, uint8_t frequency, unsigned long duration = 0)

  • pin : 핀번호
  • frequency : 출력 주파수
  • duration : 출력 지속 시간 (ms)
  • 반환값 : x
  • duty는 50%로 고정, 파라미터로 받은 주파수의 구형파로 단음 재생
  • duration만큼 음 재생
  • pitches.h 헤더 사용
  • duty=Th주기100duty = \cfrac{T_{h}}{주기} * 100

<-> pulse : digital 신호를 이용해서 0,1 값의 변화

  • PWM : 주기는 고정, duty가 변화

-> 조명의 밝기, 모터의 회전 속도 등

주기(주파수)duty
PWM고정변화
tone변화50%로 고정

시간 지연을 위한 함수

delay()

  • 밀리초 단위의 시간 지연
  • ms초 단위의 지연은 delayMicroseconds 사용
  • 단점 : delay() 실행 중 다른 대부분의 작업 수행 x이므로 정확한 시간 제어는 할 수 없다.
    -> 시간과 관계없이 상태 체크할때
    -> 타이밍이 중요하다면 millis()를 사용한다 !

millis()

  • 프로그램이 시작된 이후 경과된 CPU time을 밀리초 단위로 반환
  • 4Bytes의 값 반환
    -> 70분간 체크 가능
profile
Hongik CE

0개의 댓글