2017년 3월 19일 블로그에 게재했던 초보자를 위한 LED analogWrite() PWM 제어 편에서 Processing 언어로 작성된 코드에서 마우스의 움직임에 의해 LED의 밝기를 조절했던 즉 Fading 제어 코딩을 떠 올려 보자. PC 화면에 프로세싱에 의해 생성된 흑백 명암진 size(256,150) 그래픽 화면에서 마우스를 왼쪽에서 오른 쪽으로 스윕하면 mouseX 라는 프로세싱 명령어에 의해 마우스의 가로 축 위치가 정수 형태로 얻어지며 port.write(mouseX); 명령에 의해 시리얼 포트를 통해 아두이노와 통신하게 된다.
“아두이노 코딩에 의한 LED bar graph 예제”에서 현재 빵판에 10개의 LED가 설치되어 있는데 가변 저항 회전에 의해 0∼1023 범위의 정수가 아날로그 입력 핀 A0에 입력되면
0∼10 까지의 범위로 매핑이 이루어진다. 즉 매핑된 수 만큼의 LED가 on 되는 것이다.
본 에제를 해보기 위해서는 가변 저항이 포함된 배선을 그대로 사용해도 무방하며 단지 가변저항으로부터의 아날로그 입력에 관한 코딩 부분을 손질하기만 해도 된다.
바로 이 barGraph 예제 코드를 약간 손질하여 프로세싱의 그래픽 화면에서 마우스를 좌우로 움직임에 의해 10개의 LED를 부드럽게 on OFF 해 보기로 한다.
10개의 LED를 사용하므로 전반부를 그대로 사용하기로 하지만 통신 속도만은 재조정하기로 하자. 9600에서도 잘 동작하지만 115200으로 보다 빠른 통신속도를 사용을 권고한다. 통신 속도를 바꾸어 보면서 감각적인 느낌을 가져 보는 것도 좋은 듯하다.
loop() 문에서 첫째로 serialReading 이라는 변수를 byte로 설정한다. 이는 8비트로 Processing과 아두이노 사이에 주고받게 되는 로컬형 이진법적인(binary)변수이다.
PC측의 프로세싱으로부터 시리얼 포트를 통해 버퍼 입력이 있는지 여부를 확인한다. 버퍼 입력이 있는 것으로 판단되면 프로세싱 데이터를 바이트 단위로 읽어 serialReading 변수에 저장한다.
만약 정수형 변수 thisLed 가 이 serialReading 변수의 값이 될 때까지 LED를 on 하게 된다.
아두이노 코드에 대응하여 대단히 짧은 Processing 제어 코드를 작성해 보기로 한다. setup()에서 그래픽 화면 크기를 256X150으로 설정한다. 아울러 통신 속도를 115200으로 설정하기로 한다.
아두이노의 loop()문에 해당하는 draw()문에서 line() 명령을 사용하여 흑백 명암이 진 그래픽 화면을 작성한다. 즉 1씩 증가하는 stroke() 명령을 사용하여 256번 수직선을 그어준다.
마지막으로 마우스X에 의해 마우스의 위치가 0∼256 사이의 값이 주어지면 정수 25로 나누어 0∼10 사이의 값을 만들어 아두이노로 전송한다.
bar_Graph_Processing_LED_01
//LED bar graph
const int ledCount = 10; // the number of LEDs
int ledPins[] = {
2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
void setup() {
Serial.begin(115200);
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
byte serialReading;
if( Serial.available() ) {
serialReading = Serial.read(); //프로세싱 데이터 읽기
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
if (thisLed <serialReading ) {
digitalWrite(ledPins[thisLed], HIGH);
}
else {
digitalWrite(ledPins[thisLed], LOW);
}
}// for loop문 끝
}//Serial.available() if 문 끝
}//프로그램 긑
Procesing_barGraph_01
import processing.serial.*;
Serial port;
void setup() {
size(256, 150);
println("Available serial ports:");
println(Serial.list());
//port = new Serial(this, "COM17", 115200);
port = new Serial(this, Serial.list()[2], 115200);
}
void draw() {
for (int i = 0; i < 256; i++) {
stroke(i);
line(i, 0, i, 150);
}
port.write(mouseX/25);
}//End of Processing program
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
Firmata 프로세싱 프로그램에 의한 아두이노 bar_Graph LED 제어 (0) | 2017.05.08 |
---|---|
초보자를 위한 “아두이노 코딩에 의한 움직이는 3개의 LED 예제” (0) | 2017.05.08 |
초보자를 위한 “아두이노 코딩에 의한 LED bar graph 예제” (0) | 2017.05.04 |
뉴디자인 디지털 시계와 아날로그 시계가 포함된 HTML/JavaScript 계산기 (0) | 2017.04.29 |
초보자를 위한 “아날로그 시계 내부에 작은 초시계를 가지는 HTML+SVG 시계” (0) | 2017.04.23 |