serialVisualization/hoverbrettvisualizer/hoverbrettvisualizer.pde

130 lines
3.1 KiB
Plaintext
Raw Normal View History

2019-06-09 21:23:02 +00:00
import processing.serial.*;
Serial serialport;
Visualization visVoltage;
Visualization visCurrent;
Visualization visSteer;
Visualization visSpeed;
Visualization visYaw;
2019-06-09 21:23:02 +00:00
int steer=0;
int speed=0;
2019-06-09 21:23:02 +00:00
float voltage = 50;
float current = 0.0;
float yaw=0;
2019-06-09 21:23:02 +00:00
long lastReceive=0; //last time serial received
long lastDelay=0;
void setup() {
size(640, 450);
2019-06-09 21:23:57 +00:00
frameRate(100);
2019-06-09 21:23:02 +00:00
printArray(Serial.list());
serialport = new Serial(this, Serial.list()[32], 57600);
2019-06-09 21:23:02 +00:00
2019-06-09 21:23:57 +00:00
visVoltage = new BarV(50,150,10,100,10*3.3,12*4.2);
visVoltage.setcmain(color(100,100,100));
2019-06-09 21:23:02 +00:00
//vis = new BarH(150,150,100,10,0,100);
2019-06-09 21:23:57 +00:00
//visVoltage = new Tacho(150,150,100,0,100);
//vis = new Direction(150,150,100,0,100,0,1,0);
2019-06-09 21:23:02 +00:00
visVoltage.setShowMinMax(true);
visVoltage.setTitle("Voltage [V]");
visCurrent= new Tacho(150+250,150,100,0,100);
2019-06-09 21:23:02 +00:00
visCurrent.setShowMinMax(true);
visCurrent.setTitle("Current [A]");
visSteer = new BarH(10,340,100,10,-1000,1000);
visSteer.setTitle("Steer");
visSpeed = new BarV(10+100/2-5,300,10,100,-1000,1000);
visSpeed.setTitle("Speed");
visYaw = new Direction(150+250,300,100,0,360,0,1,0);
visYaw.setTitle("Yaw");
2019-06-09 21:23:02 +00:00
}
void draw() {
receive();
background(255);
visVoltage.setValue(voltage);
visCurrent.setValue(current);
visSteer.setValue(steer);
visSpeed.setValue(speed);
visYaw.setValue(yaw);
2019-06-09 21:23:02 +00:00
visVoltage.drawVis();
visCurrent.drawVis();
visSteer.drawVis();
visSpeed.drawVis();
visYaw.drawVis();
2019-06-09 21:23:02 +00:00
fill(color(0,0,0));
textSize(12);
long _delay=lastDelay;
if (millis()-lastReceive>1000){ //show counting up if update too long ago
_delay=millis()-lastReceive;
}
text("Delay="+(_delay), 5,12);
}
public void receive()
{
2019-06-09 21:23:57 +00:00
boolean received=false;
byte[] inBuffer = new byte[16];
2019-06-09 21:23:02 +00:00
while(serialport.available()>0) {
2019-06-09 21:23:57 +00:00
inBuffer = serialport.readBytes();
2019-06-09 21:23:02 +00:00
serialport.readBytes(inBuffer);
if (inBuffer != null && inBuffer.length==16) {
received=true;
steer = extract_int16_t(inBuffer,0);
speed = extract_int16_t(inBuffer,2);
voltage = extract_float(inBuffer,4);
current = extract_float(inBuffer,8);
yaw = extract_float(inBuffer,12);
//println("yaw="+yaw);
println("voltage="+voltage);
2019-06-09 21:23:02 +00:00
2019-06-09 21:23:57 +00:00
}
2019-06-09 21:23:02 +00:00
}
if (received){
lastDelay=millis()-lastReceive;
lastReceive=millis();
}
}
public int extract_uint16_t(byte array[], int startbyte) {
return ((int)array[startbyte] & 0xff) | ((int)array[startbyte+1] & 0xff)<<8;
}
public int extract_int16_t(byte array[], int startbyte) {
if ( ((int)array[startbyte+1] & 0x80) == 0x00 ) { //2's complement, not negative
return ( ((int)array[startbyte] & 0xff) | ((int)array[startbyte+1] & 0x7f)<<8 );
}else{ //value is negative
return -32768 + ( ((int)array[startbyte] & 0xff) | ((int)array[startbyte+1] & 0x7f)<<8 );
}
}
public float extract_float(byte array[], int startbyte) {
int MASK = 0xff;
int bits = 0;
int i = startbyte+3; //+3 because goes backwards and has 4 bytes
for (int shifter = 3; shifter >= 0; shifter--) {
bits |= ((int) array[i] & MASK) << (shifter * 8);
i--;
}
return Float.intBitsToFloat(bits);
}