프로세싱 설치 필요

2022.08.30 - [Arduino] - 프로세싱 설치 (Install Processing)

스케치

총 2개 필요 = 아두이노 동작 스케치 +  PC 동작 프로세싱 IDE 스케치

아두이노 동작 스케치 = 영점 조정 값설정, 주기적 색 감지, RGB 갑스올 바꾸고 시리얼 통신 통해 PC 전달

PC 동작 프로세싱 IDE 스케치 = 전달받은 데이터에서 3개 정수 값 분리해 실행 창 배경색으로 설정


아두이노 스케치

/* 
  TCS230 Color Sensing 
   
  색 감지 & PC 전달 & Processing 스케치 배경색 예제 
   
  Calibrate 스케치로 얻어낸 영점 조정 데이터 사용 = 먼저 Calibrate 스케치 실행
   
*/ 

#include <MD_TCS230.h> 
#include <FreqCount.h> 
 
// 연결된 핀 번호들: S0_OUT <-> 8, S1_OUT <-> 9 
#define  S2_OUT  12 
#define  S3_OUT  11 
#define  LED     13  // HIGH = ENABLED 
 
// TCS230 객체인 CS 사용 핀 선언
MD_TCS230 CS(S2_OUT, S3_OUT, /* S0_OUT, S1_OUT, */ LED); 
 
// Calibrate 스케치 실행 얻은 영점 조정 데이터. 
// TCS3200 컬러 감지 센서 1 게시물에서 나온 본인 결과값 적어야함.

sensorData sdBlack = { 40, 50, 50 }; 
sensorData sdWhite = { 2640, 1370, 1980 }; 
 
// 전역 변수들: 
colorData rgb; 
 
void setup() 
{ 
  // 시리얼 포트 초기화 
  Serial.begin(115200); 
 
  // 컬러 센서 초기화 begin()
  // 영점 조정 위한 검정색, 흰색 값 설정 
  CS.begin(); 
  CS.setDarkCal(&sdBlack); 
  CS.setWhiteCal(&sdWhite); 
} 
 
void loop() 
{ 
  // 색 감지, RGB 값 읽기
  CS.read(); 
   
  // 읽을 데이터 준비 때까지 기다림
  while(!CS.available()) ; 
   
  // RGB 데이터 값 읽기
  CS.getRGB(&rgb); 
   
  // 쉼표 분리된 값 출력
  Serial.print(rgb.value[TCS230_RGB_R]); 
  Serial.print(","); 
  Serial.print(rgb.value[TCS230_RGB_G]); 
  Serial.print(","); 
  Serial.println(rgb.value[TCS230_RGB_B]); 
   
  delay(100); 
}

프로세싱 스케치

import processing.serial.*; 
 
int redValue = 0;        // Red 컬러 값 
int greenValue = 0;      // Green 컬러 값 
int blueValue = 0;       // Blue 컬러 값 
 
Serial myPort; 
 
void setup() { 
  size(200, 200); 
 
  // 사용 가능 모든 시리얼 포트 출력
  println(Serial.list()); 
 
  // PC 두번째 시리얼 포트가 아두이노와 연결된 시리얼 포트라 Serial.list()[2] 사용 
  // 다른 포트를 사용 시 그 포트 숫자 작성
  myPort = new Serial(this, Serial.list()[6], 115200); 
  // '\n' 받을 때까지 serialEvent() 발생 X 
  myPort.bufferUntil('\n'); 
} 
 
void draw() { 
  // 아두이노 RGB 데이터 배경색 설정
  background(redValue, greenValue, blueValue); 
} 
 
void serialEvent(Serial myPort) {  
  // 시리얼 포트 ~ 새 줄문자 = inString 문자열 받음 
  String inString = myPort.readStringUntil('\n'); 
 
  if (inString != null) { 
    // 문자열 있다면 앞 뒤 공백 문자 삭제
    inString = trim(inString); 
    // 쉼표 분리 integer 값 만듦 
    int[] colors = int(split(inString, ",")); 
    // 3개의 값 받으면 RGB 모든 값 받아 들인 것 
    // 각 redValue, greenValue, blueValue 넣고 콘솔 출력
     
    if (colors.length >=3) { 
      redValue = colors[0]; 
      greenValue = colors[1]; 
      blueValue = colors[2]; 
      System.out.println(String.format("RGB(%d, %d, %d)", redValue, greenValue, blueValue)); 
    } 
  } 
}

 

+) [ ] 안에 들어가야 할 숫자

 

 

아두이노와 연결된 포트 = COM6

COM6 = 위에서부터 2번째에 있음

[ ] 안에 2가 들어가면 됨

 


아두이노 업로드 → 프로세싱 업로드


결과