Created
June 17, 2020 15:08
-
-
Save dj1711572002/2b46f6533f714bbd9707a18cc799ec17 to your computer and use it in GitHub Desktop.
Processing_FileChooser_CSVread_PowerCaluculation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//**************************Processing PowerCalculation from CSV File *************************** | |
//*************************Shinshu-Makers 2020/06/18************************************************** | |
import processing.serial.*;//USB Serial library | |
//---JAVA SWING FIle read---- | |
import javax.swing.*; | |
int MAX_LINE =69000; | |
int MAX_CUE = 7; | |
int readN=0; | |
String getFile = null; | |
String[] datalines; | |
float[][] jdata = new float[MAX_LINE][MAX_CUE]; | |
//---------------------------- | |
PrintWriter output;//Filing library | |
int lf = 10; // Linefeed in ASCII | |
int cr=13; //Carriage Return in ASCII | |
String myString1 = null;//Recieved data as string 1st | |
Serial myPort1; // 1st serial port | |
int Serialflag=0; | |
//===Data Acquisition parameters======================================================== | |
int i=1; | |
int j=0; | |
int m=0; | |
int n=0; | |
String [] mystringArry1=new String[600000];//For logging at push "q" key 600K data | |
String info; | |
//===Power Calc parameters============================================================== | |
int gos,gos_1;//edge change | |
int [] kukanArry=new int[600000]; | |
int kukan=0; | |
int kukanN=0; | |
int rflag=0; | |
int lflag=0; | |
float [] WorkR=new float [600000];//Rightworksum i=dNo Index | |
float [] WorkL=new float [600000];//Leftworksum i=dNo Index | |
float [] WorkRL=new float [600000];//Right&Leftworksum i=dNo Index | |
float [] Rinte=new float[600000];// R torque Integral array | |
float [] Linte=new float[600000];// L torque Integral array | |
float [] power=new float[600000];// power on time | |
float Rwork,Lwork;//Rinte*dshuki Linte*dshuki | |
float Rworksum=0; | |
float Lworksum=0; | |
float powersum0,powersum1,powersum2; | |
float rtdata,rtdata_1; | |
float ltdata,ltdata_1; | |
int dNo=0; | |
float hanshucho=0.53407075;//Half shucho | |
float shucho=1.0681415;//shucho 170mmcrank | |
float dshucho;//kukanN bubun shucho | |
//===Graph Plot parameters================== | |
int x,x_1; | |
int y0=0,y0_1=0; | |
int y1=0,y1_1=0; | |
int y2=0,y2_1=0; | |
int y3=0,y3_1=0; | |
int y4=0,y4_1=0; | |
int y5=0,y5_1=0; | |
int y6=0,y6_1=0; | |
int startFlag=0; | |
int gFlag=0; | |
float [] data;// sengen | |
void setup() { | |
//===================Display setup=================== | |
frameRate( 960 ); | |
size(1000,700); | |
background(0,0,0); | |
//======================================================= | |
//------------------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; | |
//----------------------------------------------------------------------------------------------- | |
//===Serial Rcv =============================== | |
if(key=='s') | |
{ | |
Serialflag=1; | |
println("********Push'g'= start 'q'=save & quit***** "); | |
// ********************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()[1], 115200); | |
myPort1.clear(); | |
myString1 = myPort1.readStringUntil(lf); | |
println(myString1); | |
myString1 = null; | |
//********************************************************** | |
data=new float[7];//kakuho | |
} | |
} | |
void draw() { | |
//==CSV File Data get==== | |
if(getFile != null) | |
{ | |
println(getFile); | |
fileLoader(); | |
} | |
//rtdata=jdata[][0],ltdata=jdata[][1],gos=jdata[][2],dNo=jdata[][3],cadence=jdata[][4],PowerTap=jdata[][5],HeartRate=jdata[][6] | |
//====================== | |
//==Hanshuki sekibun ========= | |
if(i<readN)//readN read DataNum | |
{ | |
i++;//total data counter=dNo | |
kukan++;//kukanchoNum | |
rtdata_1=rtdata;//Previous RightTorque mV | |
rtdata=jdata[i][0]*1.1918;//Right Torque N | |
Rinte[i]=(rtdata+rtdata_1);//tani sekibun N | |
ltdata_1=ltdata;//Previous LeftTorque N | |
ltdata=jdata[i][1]*0.9961;//Left Torque | |
dshucho=shucho/kukanArry[i]; | |
Linte[i]=(ltdata+ltdata_1);//tani sekibun N | |
gos_1=gos;//shuki | |
gos=int(jdata[i][2]); | |
dNo=int(jdata[i][3]); | |
//===SekibunKukan kukanArry make========================= | |
if(gos!=gos_1)//JOshiten edge change | |
{ | |
kukanN=kukan; | |
kukan=0; | |
n=0; | |
Rinte[i-kukanN]=0; | |
Linte[i-kukanN]=0; | |
Rworksum=0; | |
Lworksum=0; | |
dshucho=hanshucho/kukanN; | |
for(m=i-kukanN;m<i;m++) | |
{ | |
kukanArry[m]=kukanN; | |
Rwork=Rinte[m]*dshucho/2;//daikei sekibun shigotoryo | |
Lwork=Linte[m]*dshucho/2;//daikei sekibun shigotoryo | |
Rworksum=Rworksum+Rwork; | |
Lworksum=Lworksum+Lwork; | |
WorkR[m]=Rworksum; | |
WorkL[m]=Lworksum; | |
WorkRL[m]=WorkR[m]+WorkL[m]; | |
n++; | |
if(n==1){power[m]=0;} | |
else | |
{ | |
power[m]=WorkRL[m]/((n-1)*0.008); | |
} | |
//--Data pirnt--- | |
info=nf(jdata[m][3],5,0)+","+nf(m,6)+","+nf(jdata[m][0],4,0)+","+nf(jdata[m][1],4,0)+","+nf(gos,4,0)+","+nf(Rwork,4,0)+","+nf(Lwork,4,0)+","+nf(WorkR[m],4,0)+","+nf(WorkL[m],4,0)+","+nf(WorkRL[m],4,0)+","+nf(power[m],4,1)+","+nf(kukanArry[m],3); | |
output.println(info); | |
println(info); | |
} | |
} | |
if(i>readN-1) | |
{ | |
//output.flush(); | |
output.close(); | |
exit(); | |
} | |
//} | |
}// sekibun end | |
}//draw | |
void keyPressed(){ | |
int k; | |
//String[] datastr=new String[100]; | |
if(key=='a') | |
{ | |
getFile = getFileName(); | |
} | |
if( key == 'q' ){ | |
for(k=0;k<i;k++){ | |
//datastr=split(mystringArry1[k],','); | |
//println(datastr[0]); | |
//output.print(mystringArry1[k]); | |
} | |
output.flush(); | |
output.close(); | |
exit(); | |
} | |
if(key=='s')// Data Acquisition start | |
{ | |
startFlag=1; | |
gFlag=0;// not Graph monitor only | |
println("StartFlag=1"); | |
} | |
if(key=='g')//Graph start | |
{ | |
startFlag=1; | |
gFlag=1;// not Graph monitor only | |
println("gFlag=1"); | |
} | |
} | |
int Yplot(int ch,float y,float yspan,int chsu)//Graph ch plot | |
{ | |
int Framey=700; | |
int chH=int(Framey/chsu); | |
int baseY=int(chH/2)+(ch*chH); | |
float ydot=chH/yspan; | |
int ch_plotY=int(ydot*y+baseY); | |
return ch_plotY; | |
} | |
//------------CSVFile read --------------------------------------- | |
void fileLoader(){ | |
//getfile=path+filename | |
String ext = getFile.substring(getFile.lastIndexOf('.') + 1); | |
ext.toLowerCase(); | |
if(ext.equals("csv") || ext.equals("txt") ){ | |
datalines = loadStrings(getFile); | |
if(datalines != null) { | |
for(int i = 0; i < datalines.length; i ++) { | |
if(datalines[i].length() != 0) { | |
readN++; | |
String[] values = datalines[i].split("," , -1); | |
for(int j = 0; j < MAX_CUE; j ++) { | |
if(values[j] != null && values[j].length() != 0 && values[j]!="*") { | |
jdata[i][j] = float(values[j]); | |
//print("jdata["+i+"]["+j+"]="+jdata[i][j] + "\t"); | |
//print(jdata[i][j] + "\t"); | |
} | |
} | |
//print(readN+"\n"); | |
} | |
} | |
} | |
getFile = null; | |
} | |
} | |
String getFileName(){ | |
SwingUtilities.invokeLater(new Runnable() { | |
public void run() { | |
try { | |
JFileChooser fc = new JFileChooser(); | |
int returnVal = fc.showOpenDialog(null); | |
if (returnVal == JFileChooser.APPROVE_OPTION) { | |
File file = fc.getSelectedFile(); | |
getFile = file.getPath(); | |
} | |
} | |
catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
); | |
return getFile; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment