스위치를 이용해서 LED 제어하기

김지성·2022년 7월 18일
1

Embedded

목록 보기
9/19
post-thumbnail

1.1 LED & 저항 브레드 보드에 연결하기

  • LED
    다리가 긴 쪽 : (+), VCC
    다리가 짧은 쪽 : (-), GND

  • 저항
    220옴

(1)

MCU(5V) <-> 브레드 보드(빨간색 선)
MCU(GND) <-> 브레드 보드(검은색 선)

(2)
(초록색 선으로 5V공급해준다.)

  • 브레드 보드(40번)에 LED(+)를 연결한 다음 37번에 LED(-)를 연결.
  • GPIO로 LED를 제어해주기 위해서 저항의 끝 부분에 PB6을 연결시켜 준다.
    (노란색 선으로 저항과 GND를 이어준 이유는 GPIO로 제어하지 않고 항상 LED를 ON시켜 주기 위해서이다.)

(3) 최종 회로도


1.1.2 GPIO를 이용하여 LED ON/OFF 시키기

MCU의 PB6을 저항 끝에 달아줌으로써 LED를 ON/OFF시킬 것이다.

PB6이 3.3V로 SET 될 경우 >> LED ON
PB6이 0V로 CLEAR될 경우 >> LED OFF

Q : 왜 0일때 LED가 켜지고, 1일때 LED가 꺼지는 것일까?
A : 우리는 3.3V를 이용하여 전원을 공급하고 있다. 이때 PB6이 1이 된다면 3.3V->3.3V가 되기 때문에 전압차가 발생하지 않으므로 전류가 흐르지 않는다. 그러므로 LED는 OFF된다. 반대로 PB6이 0이 된다면 3.3V->0V이므로 전압차가 발생하여 전류가 흐르기 때문에 LED는 ON이 된다.


1.2 스위치를 이용해서 LED ON/OFF 시키기

1.2.1 스위치에 대해 간략하게 알아보자

스위치를 위와 같은 회로로 구성하기 위해서는 기본적인 개념을 알고 가야한다.

  • 스위치는 어떻게 작동하는 거지?
    스위치는 위 그림처럼 1,2,3,4로 나눠져 있다는걸 알 수 있다. 1,3과 2,4는 같은 선으로 연결 되어 있기 때문에 테스터기로 확인해보면 소리가 난다. 하지만 1,2과 3,4는 서로 다른 선이므로 테스터기로 확인을 해봐도 소리가 나지 않는다.

    하지만 버튼을 누른상태에서 1,2와 3,4를 테스터기로 확인해보면 소리가 난다.

    버튼을 누르지 않는다면 가운데에 있는 회로가 OPEN이 되고, 버튼을 누르게 된다면 SHORT되므로 1,2와 3,4가 도통되는 것이다.

    브레드 보드에 스위치를 연결할 때 어느 부분이 도통되는지(스위치 눌렀을 때)를 확인해야 한다. 만일 스위치를 왼쪽으로 90도 회전하여 꽂았다면 1과 2는 같은 선상에 있기 때문에 스위치의 역할을 제대로 할 수 없었을 것이다. 서로 도통되는 부분을 서로 다른 선상에 꽂아주는게 포인트이다.

1.2.2 스위치를 브레드 보드에 연결해보자

(PB0을 결선할때 3.3V쪽이 아닌 끝부분임을 주의한다)

1.2.3 회로 구성은 끝났으니 SW로 넘어가보자

회로만 보고 예측했을 경우 아래와 같은 결과가 나올 것이다.
1) 스위치가 OPEN일 때 : PB0 = 1
2) 스위치가 CLOSE일 때 : PB0 = 0
**(main문 밖에다가 "int button state = 0;"을 해준다)

1.3 스위치를 이용하여 LED를 제어해보자

스위치 회로, LED 회로 각각 따로 결선시켜 준다. 결선보다 중요한것은 소스를 어떻게 짰느냐 이다.
1) 버튼을 눌렀을 경우 PB0은 0이 되는게 맞지만 "!(NOT)"때문에 1이 될 것이다. 1은 "참"이므로 if문으로 들어갈 것이고, PB6이 0V라면 3.3V와 함께 전위차가 생기므로 LED가 ON 될 것이다.

2) 버튼을 안누를 경우 PB0은 1이 되는게 맞지만 "!(NOT)"때문에 0이 될 것이다. 0은 "거짓"이므로 else문으로 들어갈 것이고, PB6이 3.3V라면 전위차가 생기지 않으므로 LED가 OFF 될 것이다.

즉 버튼이 눌리는 순간순간을(0과 1) PB0을 이용하여 if와 else로 나누고, 거기 안에서 PB6을 이용해 LED를 제어한다. 회로는 개별적으로 구성되어 있지만 소프트웨어를 이용해 하나로 묶었다.

profile
JUST DO IT

0개의 댓글