Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dj1711572002/2b46f6533f714bbd9707a18cc799ec17 to your computer and use it in GitHub Desktop.
Save dj1711572002/2b46f6533f714bbd9707a18cc799ec17 to your computer and use it in GitHub Desktop.
Processing_FileChooser_CSVread_PowerCaluculation
//**************************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