라즈베리파이에서 마이크로파이썬을 사용하다 보면, 사용자나 주변기기로부터 값을 입력받거나, 또는 값을 출력해야 하는 경우들이 생긴다. 이렇게 값을 이용하려면, 먼저 변수(variables)를 만들어줄 필요가 있다. 변수는 값을 임시로 저장하는 공간 같은 것으로, 그 내용값을 변화시켜줄수 있다.
1. 변수선언 및 값 변경방법 일반
먼저 변수를 만들고 변수에 값을 저장하는 방법은 다음과 같다. 값을 저장하는 순간에 변수가 생성된다.
원하는 이름으로 변수를 만들고, 이 변수에 다음과 같이 특정한 값 그자체나, 특정한 값을 가진 다른 변수를 할당해주면 된다. 저장되는 값의 형태는 정수나, 실수(float), 문자열(string) 등 다양하다.
var1 = 3 –> 3이란 수치값을 var1 이름의 변수에 저장한다.
var2 = anyvariable –> var2를 사용하기전에 이미 사용되었던 anyvariable이란
이름의 변수에 저장된 값을 var2에 복사해서 저장해준다.
변수값을 변경하는 방법은 바로 위에서와 값이 새로운 값을 해당 변수에 새로 저장해주면 된다.
var1 = 5 –> var1 이름의 변수에 저장된 값이 5로 변경된다.
var2 = var1 –> var2에 var1의 값을 복사해서 저장한다. 즉 5가 저장된다.
2. 전역변수
프로그램을 만들다 보면, 메인 프로그램외에 별도의 함수를 선언하거나, subroutine등을 만들거나 해야 할때가 있다. 이때 각 모듈간에 값을 전달하기 위해 사용되는 것이 전역 변수이다. 이렇게 프로그램 전체에서 사용되는 변수에 대해서는 메인 프로그램 뿐만 아니라 참조되는 함수 모듈 등에서도 사용됨을 기계에게 알려주기 위한 전역변수 설정이 필요하다. 또한 각 루틴이나 submodule에서도 전역변수값을 변경하는 경우는 선언이 필요하다.
단, 해당 모듈에서 이 변수의 값을 참조만 하고, 변경시키지는 않는 경우라면 해당 모듈 내에서의 전역변수 선언은 생략할 수도 있다.
global mybutton –> 변수이름이 mybutton인 전역변수를 선언해줌
global mybutton = 0 –> 초기값이 0인 전역변수를 mybutton이란 이름으로 선언
3. 피코보드에서 입출력 핀들의 변수할당
그런데 라즈베리파이 피코보드에서는 입출력 핀들을 센서나 스위치등의 장치와 연결하기 위해 사용하기도 하는데, 이 때 해당 핀들의 입출력을 위해 사용하는 핀들을 GP 핀이라고 한다. 라즈베리 피코보드의 디지탈 입출력을 위한 GP 핀들의 구성은 다음과 같으며, 이러한 핀들을 이용하여 입출력되는 디지탈 값은 0또는 1이 된다.
또한 피코보드의 디지탈 입출력을 위한 특정 GP핀을 핀모드 선언을 통해 변수에 할당할 수 있고,
이렇게 할당된 변수값을 0 또는 1로 변화시키는 방법으로 해당 핀으로 출력되는 상태를 바꿔줄수도 있다.
예를 들면 피코보드의 GP핀들을 출력용도로 사용하려면
변수명 = machine.Pin(핀 번호, machine.Pin.OUT) 의 형식을 이용하면 된다.
이렇게 핀에 할당된 변수의 값을 변경하면 해당 핀으로 출력되는 값의 상태가 변경된다.
즉, 위에서처럼 특정 GP핀을 led라는 변수에 할당하고 해당핀에 LED를 연결한 상황에서
프로그램에서 led.value(0)으로 적어주면 led 변수의 값이 0으로 변경되고, 해당 핀에 연결된 LED는 꺼진다.
프로그램에서 다시 led.value(1)으로 적어주면 led 변수는 값이 1로 변경되고, 연결된 LED는 켜지게 된다.
또 다른 방법으로는 led.toggle() 처럼 toggle()이란 함수를 이용해주면 0과 1의 값을 서로 바꿔주게 된다.
만일 피코보드의 GP핀들을 디지탈 입력용도로 사용하려면
변수명 = machine.Pin(핀 번호, machine.Pin.IN, machine.Pin,PULL_DOWN) 의 형식이 된다.
참고로, PULL_DOWN은 눌리지 않은 경우 해당 핀으로 입력되는 값을 0으로,
PULL_UP은 눌리지 않은 경우 해당 핀으로 입력되는 값을 1로 설정하도록 지정하는 것이다.
피코보드의 GP핀들중 일부는 아날로그 입출력용으로 지정되어 있는데, 이들 핀들의 경우 아날로그용 할당 방법은 다음과 같다.
아날로그 값을 입력받기 위한 변수 할당
변수명 = machine.ADC(26)
아날로그값이 담긴 변수를 이들핀으로 출력하기 위한 변수할당
변수명 = machine.PWM(machine.Pin(15))

