今回もProccessingをやっていきます。今回は、いくつかのデータをArduinoからProcessingに送っていこうと思います。

 前々回やった方法でまとめて送ることもできるとは思いますが、めんどくさかったのでStringを使うことにしました。


・Arduino
 今回は3つにデータを1秒おきに送ろうと思います。
void setup() {
  Serial.begin(9600);
}

void loop() {
  int valueh = analogRead(0);
  int values = analogRead(1);
  int valuev = analogRead(2);
  Serial.print(valueh);
  Serial.print(",");
  Serial.print(values);
  Serial.print(",");
  Serial.print(valuev);
  Serial.print("\n");

  delay(1000);
}


・Processing
 Processingのコードは以下のようになります。
import processing.serial.*;
Serial myPort;

int []data = new int [3];

void setup() {
  myPort = new Serial(this, Serial.list()[1], 9600);
}

void draw() {
}

void serialEvent(Serial p) {  
  String inString = myPort.readStringUntil('\n');

  if (inString != null) {
    inString = trim(inString);
    data = int(split(inString, ','));
    println(data);
  }
}
 このプログラムの大事なところは以下の通りです。
① String inString = myPort.readStringUntil('\n');
 ここで改行(\n)までをいっぺんに読み取ります。例:"valueh,values,valuev\n"
② inString = trim(inString);
 trim()で改行(\n)を削除します。例:"valueh,values,valuec"
③ data = int(split(inString, ','));
 split()で区切られた文字列を配列に直し、int()でint型に直します。例:{valueh,values,valuec}

 このようにすることでArduinoからProcessingにint型の複数の値を簡単に渡すことができます。

キャプチャ
 出力はこのような感じで出てきます。

 今回はここまでです。次回は前回作ったメーターを改良し、スピード、温度、電圧を表示できるようなものを作りたいです。それではまた今度。