Research Topics/Arduino2009. 2. 16. 01:31

Arduino 보드에서 Arduino 프로그램으로 USB Serial 방식으로 전송하기때문에, Processing 에서도 Serial API를 활용하여
Arduino 보드에서 보내는 데이터를 읽어낼 수 있다.

Arduino 코드에서는 Serial.print를 이용하여 Serial 데이터를 송신
int flexiSensor = 5;
int button1 = 2;
int button2 = 3;


int flexiValue = 0;
int button1Value = 0;
int button2Value = 0;

void setup()
{
  Serial.begin(9600);
 
  pinMode(button1, INPUT); 
  pinMode(button2, INPUT);
}

void loop ()
{
  flexiValue = analogRead(flexiSensor);
  button1Value = digitalRead(button1);
  button2Value = digitalRead(button2);
 
  Serial.print(flexiValue, DEC);
  Serial.print(",");
  Serial.print(button1Value, DEC);
  Serial.print(","); 
  Serial.println(button2Value, DEC);
}

Processing 에서는 serial 라이브러리를 추가해주고,  Serial.list() 를 이용해 목록확인, 읽어들일 포트를 설정한 후

serialEvent 함수를 구현하여 그안에서 데이터가 왔을경우에 대한 처리를 한다
import processing.serial.*;

Serial inputPort;
int linefeed = 10;
int ballPosition = 10;

void setup()
{
  size(640,480);
  println(Serial.list()); // 가용한 serial port 의 자원의 목록을 보여준다
 
  inputPort = new Serial(this, Serial.list()[0], 9600); // 이경우는 목록의 [0] 번이 Arduino 인경우임
  inputPort.bufferUntil(linefeed);
  
}


void draw()
{
   background(0);
   fill(255,230,0);
   ellipse(ballPosition, 50, 50, 50);
   print("ballPosition=" + ballPosition);

}

void serialEvent(Serial inputPort) // serial port 로 데이터가 들어올 경우 호출되는 함수
{
  String inputString = inputPort.readStringUntil(linefeed);
 
  if(inputString != null)
  {
    inputString = trim(inputString);
    int sensorValues[] = int(split(inputString, ','));
    ballPosition = sensorValues[0];
   
  }
}

이와 같은 방법으로 Arduino 를 통한 다양한 센서, 버튼 등의 physical 한 interface 의 입력을 받아
Processing 을 통하여 graphical 한 visual 요소를 표현 할 수 있다.


Posted by 알 수 없는 사용자