diff --git a/logdata_visualization/logdata_visualization.pde b/logdata_visualization/logdata_visualization.pde index 1ccbbf0..0348728 100644 --- a/logdata_visualization/logdata_visualization.pde +++ b/logdata_visualization/logdata_visualization.pde @@ -1,6 +1,12 @@ +import processing.serial.*; int vis_textsize=12; //copy from Visualization class +boolean useSerial=false; //false=read from csv log, true=read from serial port +Serial serial; +String serialString=""; //last read string +int serial_endchar=10; //10=ASCII Linefeed + Visualization vis_cmd_FrontL; Visualization vis_cmd_FrontR; Visualization vis_cmd_RearL; @@ -62,9 +68,20 @@ void setup() { size(1920, 1080); frameRate(100); - logdata = loadTable("LOG00008_rumfahren_neu.TXT", "header, csv"); + if (useSerial) { + printArray(Serial.list()); + // Open the port you are using at the rate you want: + serial = new Serial(this, Serial.list()[0], 9600); + serial.clear(); + // Throw out the first reading, in case we started reading + // in the middle of a string from the sender. + serialString = serial.readStringUntil(serial_endchar); + serialString = null; + }else{ + logdata = loadTable("LOG00008_rumfahren_neu.TXT", "header, csv"); - println("loaded "+logdata.getRowCount()+" lines. Times: "+logdata.getRow(0).getFloat("time")+"s to "+logdata.getRow(logdata.getRowCount()-1).getFloat("time")+"s"); + println("loaded "+logdata.getRowCount()+" lines. Times: "+logdata.getRow(0).getFloat("time")+"s to "+logdata.getRow(logdata.getRowCount()-1).getFloat("time")+"s"); + } PVector pos_vis_cmd = new PVector(100,150); PVector size_vis_cmd = new PVector(10,100); @@ -166,37 +183,72 @@ void setup() { void draw() { long loopmillis=millis()+25000; - if (loopmillis>=nextTime){ - TableRow row = logdata.getRow(nextID); - lastTimeData=nextTime; - nextTime=(long)(row.getFloat("time")*1000); //get time and convert from seconds to ms - - cmd_FrontL=row.getInt("cmd_FrontL"); - cmd_FrontR=row.getInt("cmd_FrontR"); - cmd_RearL=row.getInt("cmd_RearL"); - cmd_RearR=row.getInt("cmd_RearR"); - current_FrontL=row.getFloat("current_FrontL"); - current_FrontR=row.getFloat("current_FrontR"); - current_RearL=row.getFloat("current_RearL"); - current_RearR=row.getFloat("current_RearR"); - speed_FrontL=row.getInt("speed_FrontL"); - speed_FrontR=row.getInt("speed_FrontR"); - speed_RearL=row.getInt("speed_RearL"); - speed_RearR=row.getInt("speed_RearR"); - temp_Front=row.getFloat("temp_Front"); - temp_Rear=row.getFloat("temp_Rear"); - vbat_Front=row.getFloat("vbat_Front"); - vbat_Rear=row.getFloat("vbat_Rear"); - currentAll=row.getFloat("currentAll"); - throttle=row.getInt("throttle"); - brake=row.getInt("brake"); + + if (useSerial) { + while (serial.available() > 0) { + serialString = serial.readStringUntil(serial_endchar); + if (serialString != null) { + println(serialString); + lastTimeData=nextTime; + nextTime=loopmillis; - if (loopmillis-nextTime>1000) {//too much behind - long _timestep=nextTime-lastTimeData; //approximated time step - nextID+=(loopmillis-nextTime)/_timestep* 0.9; //fast forward estimated time steps + + String[] list = split(serialString, ','); + cmd_FrontL=parseInt(list[0]); + cmd_FrontR=parseInt(list[1]); + cmd_RearL=parseInt(list[2]); + cmd_RearR=parseInt(list[3]); + current_FrontL=parseFloat(list[4]); + current_FrontR=parseFloat(list[5]); + current_RearL=parseFloat(list[6]); + current_RearR=parseFloat(list[7]); + speed_FrontL=parseInt(list[8]); + speed_FrontR=parseInt(list[9]); + speed_RearL=parseInt(list[10]); + speed_RearR=parseInt(list[11]); + temp_Front=parseFloat(list[12]); + temp_Rear=parseFloat(list[13]); + vbat_Front=parseFloat(list[14]); + vbat_Rear=parseFloat(list[15]); + currentAll=parseFloat(list[16]); + throttle=parseInt(list[17]); + brake=parseInt(list[18]); + + } + } + }else{ + if (loopmillis>=nextTime){ //New Data + TableRow row = logdata.getRow(nextID); + lastTimeData=nextTime; + nextTime=(long)(row.getFloat("time")*1000); //get time and convert from seconds to ms + + cmd_FrontL=row.getInt("cmd_FrontL"); + cmd_FrontR=row.getInt("cmd_FrontR"); + cmd_RearL=row.getInt("cmd_RearL"); + cmd_RearR=row.getInt("cmd_RearR"); + current_FrontL=row.getFloat("current_FrontL"); + current_FrontR=row.getFloat("current_FrontR"); + current_RearL=row.getFloat("current_RearL"); + current_RearR=row.getFloat("current_RearR"); + speed_FrontL=row.getInt("speed_FrontL"); + speed_FrontR=row.getInt("speed_FrontR"); + speed_RearL=row.getInt("speed_RearL"); + speed_RearR=row.getInt("speed_RearR"); + temp_Front=row.getFloat("temp_Front"); + temp_Rear=row.getFloat("temp_Rear"); + vbat_Front=row.getFloat("vbat_Front"); + vbat_Rear=row.getFloat("vbat_Rear"); + currentAll=row.getFloat("currentAll"); + throttle=row.getInt("throttle"); + brake=row.getInt("brake"); + + if (loopmillis-nextTime>1000) {//too much behind + long _timestep=nextTime-lastTimeData; //approximated time step + nextID+=(loopmillis-nextTime)/_timestep* 0.9; //fast forward estimated time steps + } + nextID++; + nextID=nextID%logdata.getRowCount(); } - nextID++; - nextID=nextID%logdata.getRowCount(); } @@ -253,7 +305,7 @@ void draw() { textAlign(LEFT); textSize(12); text("d="+(nextTime-lastTimeData)+"ms", 5+70,12); - if (loopmillis-lastTimeData>(nextTime-lastTimeData)*10) { //deviation too high + if (!useSerial && loopmillis-lastTimeData>(nextTime-lastTimeData)*10) { //deviation too high when reading from file text("ff="+(loopmillis-lastTimeData)+"ms", 5+70+70,12); //show warning } diff --git a/logdata_visualization/testsender/testsender.pde b/logdata_visualization/testsender/testsender.pde new file mode 100644 index 0000000..a7af2e2 --- /dev/null +++ b/logdata_visualization/testsender/testsender.pde @@ -0,0 +1,20 @@ +// Example by Tom Igoe + +import processing.serial.*; + +// The serial port: +Serial serial; + + +void setup() { + // List all the available serial ports: + printArray(Serial.list()); + + // Open the port you are using at the rate you want: + serial = new Serial(this, Serial.list()[0], 115200); +} + +void loop() { + serial.write("asdf"); + +}