메인 PC에서 돌라가는 프로세싱 프로그램과 아두이노와의 USB-2-시리얼 인터페이스에 의해서 아두이노 보드의 3색 LED의 색상 별 밝기를 각각 조절할 수 있는 프로그램을 작성하기로 하자. 이와같이 메인 PC에서 Processing 프로그램에 의해 아두이노 마이크로콘트롤러 보드를 제어할 경우 다채로우면서 다양한 아두이노 응용 프로그램을 짤 수 있는 이점이 있다.
이번 프로그램에서는 아두이노 프로그램을 Dimmer_01에서 조금 변형하여 일단 3 가지 색상을 각각 on해 보아 3색 LED의 색상을 확인해 보도록 하자. 그 후에 3색 LED를 연이어 on 시켜 어떤 색상이 디스플레이 되는지 시험해 보기로 한다.
아두이노에서 PWM 밝기 조절이 가능한 디지털 데이터 핀 3,5,6,9,10,11번 핀들 중에서 3-빨간색, 6-초록색, 9-청색 선을 배선한다. 한편 아울러 COMMON 선은 저항과 연결하되 전류 제한 저항의 다른 한쪽은 GND 즉 0V에 흑색으로 배선한다.
아두이노 프로그램 시작 부분에 어레이 LED[3]을 정의한다. 어레이는 미리 변수명과 갯수를 설정하여 메모리를 예약하는 역할을 한다. 특히 for loop 문을 사용하여 인덱스를 0에서 1씩 순차적으로 증가 시켜 불러 낼 경우 프로그램을 아주 압축적으로 짤 수 있는 이점이 있다.
setup()에서 통신 속도는 높을수록 좋다. 이 통신속도는 Processing의 port = new Serial(this, Serial.list()[2], 115200) 명령의 통신 속도와 일치해야 한다.
loop()의 초반은 Serial.available() 즉 시리얼 통신 버퍼에 무엇이 입력되었는지 Serial.read()에 의해 정수형 숫자 데이터로 읽어 들인다.
현재 예제 프로그램은 초록색 LED를 구동하도록 프로그램 되어 있다. Dimmer_01 프로그램에서처럼 프로세싱과 연동하여 초록색 LED의 밝기를 조절해 본다.
마찬가지로 빨간 색 LED 와 청색 LED에 대해서도 해당 부분을 활성화 시켜 즉 //를 제거하여 시험해 본다.
마지막 for loop문을 살려 실행 시켜 색상을 관찰해 보자. LED를 직접 들여다 보면 작은 RGB 불꽃이 보일 것이다. 동영상에서처럼 흰색 종이에 비춰보면 RGB를 확실하게 볼 수 있을 것이다.
이번 프로그램 작업에서는 바로 앞에 블로그에 올렸던 “초보자를 위한 프로세싱과 아두이노의 시리얼 통신에 의한 LED analogWrite() PWM 제어” 에서 사용하였던 Processing_Dimmer_01 프로그램을 수정 없이 사용하기로 한다. 즉 이 부분은 앞 블로그의 프로그램을 복사하여 사용하도록 한다.
프로세싱에서 그래픽 화면을 설정하고 가로 축을 따라 0에서 255 단계에 걸쳐 흑백 명암으로 이루어진 그래디언트 화면을 작도한다. for 루핑에 따른 stroke(i) 명령에서 i 값이 증가함에 따라 수직선의 명암이 점차 밝아지게 된다.
3색 LED의 경우에는 3개의 LED들이 하나에 들어 있으므로 3개의 PWM 이 가능한 아두이노 디지털 핀에 배선하게 되는 차이점이 있을 것이다.
프로세싱 프로그램이 실행되면 스트로크 조절에 의해 명암 그래디언트 화면이 얻어진다.
프로세싱 화면에서 마우스를 좌우로 이동 시키게 되면 0∼255 범위내에서 즉각적으로 발기가 변화되는 것을 볼 수 있을 것이다.
Three_Color_LED_Dimmer_01
byte LED[3] {3,6,9};
void setup() {
Serial.begin(115200);
byte i;
for(i=0; i<3;i++) {
pinMode(LED[i],OUTPUT);
}
}
void loop() {
byte brightness;
if (Serial.available()) { // 프로세싱의 시리얼 출력 여부 확인
brightness = Serial.read(); // 프로세싱의 시리얼 출력 결과물 확인
byte i;
// for(i=0; i<3;i++) { //빨간색 LED on
// analogWrite(LED[0], brightness);// 밝기 지정에 따른 LED on
// }//for loop ends
// for(i=0; i<3;i++) { //초록색 LED on
// analogWrite(LED[1], brightness);// 밝기 지정에 따른 LED on
// }//for loop ends
// for(i=0; i<3;i++) { //청색 LED on
// analogWrite(LED[2], brightness);// 밝기 지정에 따른 LED on
// }//for loop ends
// 3 색 LED on: 3색 확인을 위해서 LED 위를 백색 종이로 비춰 보도록 한다
for(i=0; i<3;i++) {
analogWrite(LED[i], brightness);// 밝기 지정에 따른 LED on
}//for loop ends
}//if...ends
}//프로그램 끝
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
초보자가 아두이노 코딩을 제대로 가장 빠르게 마스터 할 수 있는 방법은 무엇일까? (0) | 2017.03.27 |
---|---|
아두이노 초보자에게 위험스러운 “아두이노 코딩에 의한 LED ON OFF” (0) | 2017.03.23 |
구글 트렌드에 의한 사물인터넷 IOT 와 아두이노 비교 빅데이터 분석 (0) | 2017.03.21 |
구글 트렌드에 의한 4차 산업혁명과 아두이노 빅데이터 분석 (0) | 2017.03.19 |
초보자를 위한 프로세싱과 아두이노 시리얼 통신 인터페이스: 가변 저항에서 발생하는 전압 데이터 Processing에서 실시간 그래픽 (0) | 2017.03.19 |