TetsuakiBaba

workshop/csv/main

シリアル通信からのデータをちゃちゃっとCSV形式で保存する

実験をしていると,データをCSV形式に保存することがよくあります.このページではそれをちゃちゃっと行うためのコピペ用コードを置いておきます.大したコードは必要ないのですが,結構使う頻度が高いので,ここにメモがてら載せておきます.なお,シリアル通信からのデータに関してはArduinoを想定していますが,print形式,カンマ区切りでデータを送信し,一つのデータ・セットをおくったら,改行を送ることとします.print形式で送るようにしてください.ちなみにこの形式でおくっておけば,Arduino付属のシリアルプロッタでも確認ができます.

// Tetsuaki Baba
// Arduinoのサンプルコード
void setup()
{
	Serial.begin(115200);
}
void loop()
{
	Serial.print(x);
  Serial.print(",");
  Serial.println(y);
	delay(30);
}

Processingでちゃちゃっと

小泉先生のサイトのにcsv保存のProcessingコードがあるのをみて,このページを準備しようと思いました. 小泉先生のサイトのものは,mouse位置をサンプルにしていたので,それをシリアル通信に変更したのみのコードは下記のとおりです. Inspired byNaoya Koizumi

変更すべき箇所は,String型のstr_formatとportです.最初にここを自身の環境に合わせたものに変更してください.str_formatは作成するcsvファイルの先頭行に名前をつけるだけです.

// Tetsuaki Baba
// Processing のサンプルコード
// str_format: データ名をカンマ区切りで書いておく
// port: 該当するシリアルポートへのパスを明記(Windowsの場合はCOMX(Xは数字))になります.

import processing.serial.*;
PrintWriter output;
Serial myPort;
boolean flg_start = false;
long time=0;
String str_format = "x,y";
String port = "/dev/cu.wchusbserial1440";
void setup() {
  size(320, 240);
   myPort = new Serial(this, port, 115200);
}

void draw() {
  while ( myPort.available() > 0 ) {    
    String inBuffer = myPort.readString();
    if ( inBuffer != null ) {
      if ( flg_start ) output.print(inBuffer);
    }
  }
}

void keyPressed() {
  if ( key == 's' ) {
    flg_start  = !flg_start;

    if ( flg_start == false ) {
      // end of recording
      output.flush(); 
      output.close();
    } else if ( flg_start == true ) {
      // begining of recording
      String filename = nf(year(), 4) + nf(month(), 2) + nf(day(), 2) + nf(hour(), 2) + nf(minute(), 2) ;
      output = createWriter( filename + ".csv"); 
      output.println( str_format );
    }
  }
}

Openframeworksでちゃちゃっと

なんかの弾みでコードを書く時があれば,まとめておきます.