// Arduino Pro Mini 328 5V 16MHz から取り込む
// Win用に初期化変更 動作確認OK
// 2009/06/21 
import processing.serial.*;
//シリアル通信用変数portを用意
Serial port;

//読み込み値(三色)の変数を用意
int r,g,b,t;
PFont font;

void setup(){
  //画面サイズ設定
  size(400,200);
  //ポート設定
//  port = new Serial(this,"COM1",9600);
  port = new Serial(this,"COM2",38400);
  //port = new Serial(this,"/dev/tty.usbserial-A6006kvP",9600);
  //「10」(ラインフィード)までを読み込む設定にする
  port.bufferUntil(10);
  //外形線なし
  noStroke();
  
  font = loadFont("CourierNew36.vlw"); 
  textFont(font, 16); 
 
}

void draw(){
  //背景色(黒)
  background(0);
  
  fill(r,0,0);          //値を塗色の赤に代入
  rect(0,0,100,100);    //赤の矩形
  fill(0,g,0);          //値を塗色の緑に代入
  rect(100,0,100,100);  //緑の矩形
  fill(0,0,b);          //値を塗色の青に代入
  rect(200,0,100,100);  //青の矩形
  fill(r,g,b);          //三つの値を塗色のRGBに代入
  rect(300,0,100,100);  //RGB合成した矩形
  
  text("Red  ="+r, 15, 130); 
  text("Green="+g, 15, 150); 
  text("Blue ="+b, 15, 170); 
  text("Time ="+t, 15, 190); 
  
}

//シリアル通信
void serialEvent(Serial p){
  //文字列の変数stringDataを用意し、
  //「10」(ラインフィード)が来るまで読み込む
  String stringData=port.readStringUntil(10);

  //文字列データが空ではないとき
  if(stringData!=null){
    //文字列データに含まれる改行記号を取り除く
    stringData=trim(stringData);

    //整数型の配列data[]を用意し、
    //コンマ記号をもとに文字列データを区切って
    //配列data[]に整数化して入れておく
    int data[]=int(split(stringData,','));

    //配列data[]内のデータが3つなら、
//    if(data.length==3){
    if(data.length==4){
      //三つの値をそれぞれマッピングして代入
      r=int(map(data[0],0,4095,0,255));
      g=int(map(data[1],0,4095,0,255));
      b=int(map(data[2],0,4095,0,255));
      t=int(map(data[3],0,1024,0,101));

      //合図用データ送信
      port.write(65);
    }
  }  
}

//マウスが押されたら通信開始
void mousePressed(){
  //開始用データ送信
  port.write(65);
}