【パワーメーター2019】USB3ポート同時ログプログラム出来た<Processing優れもの>

前回2ポートで受信ログプログラムを簡単に作ったので、今回は3ポートの受信ログプログラムを作りました。1.5時間で完成となりました。TeraTermを3個立ち上げてログする操作が屋外でやるのが大変なので、このプログラムを作りました。まだ、UMPCでの動作確認はできてませんが。

●準備
 3個のマイコンをそれぞれUSBシリアルでUSBハブ経由でPCへ接続して、TeraTermで3個がきちんと受信されているか確認、送信文は、COM番号とデータ連番、タイムスタンプの3データを115200bpsで送ってます

Processingが使える人が対象ですが、Processingは、BASICとかC++ができる人なら簡単にできます。文科系、芸術系の学生さんがよく使ってます。
入門は、こちらMSLABO様にブログが最適です。私も随分お世話になりました。
http://mslabo.sakura.ne.jp/WordPress/make/processing%e3%80%80%e9%80%86%e5%bc%95%e3%81%8d%e3%83%aa%e3%83%95%e3%82%a1%e3%83%ac%e3%83%b3%e3%82%b9/

●プログラム
TXTgファイルを添付します。これをPROCESSINGの新規プログラム窓のコピペして実行するだけでOKです。
SerialTest_3Port_longdata_rev06
操作は、実行でログ開始してログファイルは、ProcessingのプログラムのあるフォルダーにCSVでログされます
停止は、表示されている窓にカーソルをいれた状態でqをキーインすれば終了してファイルが保存されます。
qをキーインしないとファイルは保存されません。

// Example by Tom Igoe
import controlP5.*;//Display library
ControlP5 cp5tl;
Textlabel tl1,tl2;//for Displayimport processing.serial.*;//USB Serial library
PrintWriter output;//Filing library
int lf = 10; // Linefeed in ASCII
int cr=13; //Carriage Return in ASCII
String myString1 = null;//1st Recieved data as string
String myString2 = null;//2nd Recieved data as string
String myString3 = null;//3rd Recieved data as string
String [] splt_arry1=new String[100];
String [] splt_arry2=new String[100];
String [] splt_arry3=new String[100];
Serial myPort1; // 1st serial port
Serial myPort2; //2nd serial port
Serial myPort3; //2nd serial port
int i,j;
int elapsedTime;
int startTime;
int endTime;
int endFlag=0;
String [] V1=new String[1100];//1stArray declaration Buffer memory recived 600K data
String [] V2=new String[1100];//2nd Array declaration Buffer memory recived 600K data
String [] V3=new String[1100];//3rd Array declaration Buffer memory recived 600K data
int dummy;
float stx,sty,stx_1,sty_1;

void setup() {
frameRate(2000);
//===================Display setup===================
size(1000,500);
background(255);
PFont font;
font=createFont(“Times New Roman”,30);
textFont(font);

cp5tl=new ControlP5(this);
tl1=cp5tl.addTextlabel(“lable1″);
tl1.setText(” Data Sampling ==>Push ‘q ‘ save CSV&Stop”);
tl1.setFont(font);
//=======================================================
// ********************Serial setup=**********************
//List all the available serial ports
printArray(Serial.list());
// Open the port you are using at the rate you want:
myPort1 = new Serial(this, Serial.list()[0], 115200);
myPort1.clear();
myPort2 = new Serial(this, Serial.list()[1], 115200);
myPort2.clear();
myPort3 = new Serial(this, Serial.list()[2], 115200);
myPort3.clear();
// Throw out the first reading, in case we started reading
// in the middle of a string from the sender.
myString1 = myPort1.readStringUntil(lf);
myString1 = null;
myString2 = myPort2.readStringUntil(lf);
myString2 = null;
myString3 = myPort3.readStringUntil(lf);
myString3 = null;
//**********************************************************
//——————Save FIle setup————————————————————–
String filename = nf(year(),4) + nf(month(),2) + nf(day(),2) + nf(hour(),2) + nf(minute(),2) ;
// 新しいファイルを生成
output = createWriter( filename + “.csv”);
i=0;
j=0;
//———————————————————————————————–
}

void draw() {
while (myPort1.available() > 0 && myPort2.available() > 0 && myPort3.available()>0) {

//–1ch—————————————
myString1 = myPort1.readStringUntil(cr);
//delay(200);
myString1 = trim(myString1);
if (myString1 != null) {
i++;
i=i%1000;
//print(“S1:[“,i,”]”,myString1);
V1[i]=myString1;
print(“V1[“,i,”]”,V1[i]);
// timGraph(i,V1,2);
}

//—2ch——————————————-
myString2 = myPort2.readStringUntil(lf);
//delay(200);
myString2 = trim(myString2);
if (myString2 != null) {
j++;
j=j%1000;
//print(“S2[:”,j,”]”,myString2);
V2[j]=myString2;
println(“V2[“,j,”]”,V2[j]);
//timGraph(j,V2,3);
}
//—3ch——————————————-
myString3 = myPort3.readStringUntil(lf);
//delay(200);
myString3 = trim(myString3);
if (myString3 != null) {
j++;
j=j%1000;
//print(“S2[:”,j,”]”,myString2);
V3[j]=myString3;
println(“V3[“,j,”]”,V3[j]);
//timGraph(j,V2,3);
}
}

}

void keyPressed(){
int k;
String matome;
if( key == ‘q’ ){
for(k=0;k<i/2;k++){
matome=V1[k]+”,”+V2[k]+”,”+V3[k]+”\n\r”;
print(matome);
output.print(matome);
}
output.flush();
output.close();
exit();
}

}

●結果

データ落ちはなくログされてますが、COM7が遅いせいか1行ぬけででてます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です