아두이노프로세싱 프로그래밍

초보자를 위한 라즈베리 파이3 파이선 디지털 핀 스위치 INPUT 코딩 예제

coding art 2017. 5. 24. 19:18
728x90


LED on OFF 배선에 PUSH BUTTON  형 스위치 배선 코딩을 추가하자.

LED 는 220옴 저항을 통해 BCM17(BOARD 11)에 연결하였다.

아울러 9K옴 저항과 BUTTON  스위치가 연결되는 지점에서 배선을 따내어 BCM 2(BOARD 3)번 디지털 핀에 연결하였다.
PULL UP 상태를 만들기 위해 사용되는 저항은 반드시 9K옴일 필요는 없으나 그 값은 충분히 커야 한다. 추천 값은 4.7K, 9K, 10K 또는 그 보다 좀 커도 무방하다.

이 전의 라즈베리 LED on OFF 빵판에 아두이노에 사용하였던 버튼 스위치를 추가하였다.
동일한 버튼 스위치를 사용하여 라즈베리 보드에서의 입력 특성을 시험하고자 하는 의도도 있으나 실제로 현재 보유하고 있는 버튼 스위치가 하나뿐이었다.


9K옴 저항의 다른 한 편은 BOARD 넘버 1번 즉 5V 전원에 연결하여 스위치를 누를 경우 BCM 2(BOARD 3)번 디지털 핀에 LOW 즉 0V 상태를 입력하고 놓을 경우 HIGH 즉 5V를 입력할 수 있도록 배선하였다.

다음과 같이 파이선 코딩을 해 보기로 한다.
두 종류의 라이브러리 RPI.GPIO 와 time를 설정한다.

setmode()는 BCM으로 설정한다. setwarnings() 설정이 없을 경우에는 빨간색 귀찮은 메시지가 뜨므로 항상 넣어 두도록 한다.
BCM 2번 디지털 핀을 BUTTON 스위치 입력으로 설정한다.
BCM 17번 디지털 핀을 LED 출력으로 설정한다.
이상까지가 아두이노 편집기에서 setup() 과정에 해당한다고 보여진다.


while True: 는 아두이노의 무한 루프 즉 loop()에 해당한다. 코딩 시 대소문자 및 콜론 기호에 주의하고 그 다음 명령 입력은 탭 버튼을 사용하여 일정 길이 만큼 indent  시키다. 이 룰을 지키지 않으면 에러 메시지가 빨갛게 퀵으로 뜬다.

if (GPIO.input(2)): 는 BCM 2번 디지털 핀 입력 값이 0 보다 크다면 즉 PUSH BUTTON  스위치를 놓아 둔 상태에서 입력 값이 HIGH  즉 1 이므로 print 명령을 통해 Button Released:Pull_up State 를 출력하고 1초 지연 후 LED를 on 하도록 한다.

반면에 PUSH BUTTON  스위치를 누른 상태에서 입력 값이 LOW  즉 0 이면 print 명령을 통해 Button Pressed:Pull_down State 를 출력하고 1초 후 LED를 OFF 하도록 한다.


아두이노 예제 DigitalReadSerial과 Button 예제에서 심한 바운스(bounce) 현상과 함께 입력이 불확실했음에도 불구하고 파이선 코딩에서는 디지털 핀 입력 과정에 아무런 문제가 없어 보인다.


무한 반복 loop()를 빠져 나오기 위해서는 CONTROL C 를 입력한다.

물론 라즈베리 실험에 사용된 버튼 스위치는 아두이노 실험에 사용했던 스위치를 그대로 사용했음을 밝힌다.

이번 코드도 대단히 짧으므로 지난번 코드를 직접 수정 입력해 보기 바란다.