euglena/lib/serial/test/serial_latency/serial_latency.pde

54 lines
1.2 KiB
Plaintext
Raw Normal View History

2016-07-10 00:36:44 -07:00
// Arduino Duemilanove (168) on OS X 10.9
// with either 115200 or 38400 bps
// on Processing 2.0.3 (cu & tty): 24 ms avg, 35 ms max
// on Processing 2.1b1 (cu & tty): 18 ms avg, 35 ms max
import processing.serial.*;
Serial serial;
int start;
byte out = '@';
int last_send = 0;
byte[] in = new byte[32768];
long num_fail = 0;
long num_recv = 0;
int max_latency = 0;
void setup() {
println(serial.list());
// change this accordingly
serial = new Serial(this, serial.list()[0], 115200);
start = millis();
}
void draw() {
background(255);
if (0 < serial.available()) {
int recv = serial.readBytes(in);
for (int i=0; i < recv; i++) {
if (in[i] == out) {
num_recv++;
int now = millis();
if (max_latency < now-last_send) {
max_latency = now-last_send;
}
last_send = 0;
}
}
}
if (last_send != 0 && 1000 < millis()-last_send) {
num_fail++;
last_send = 0;
println(num_fail+" bytes timed out");
}
if (last_send == 0) {
if (out == 'Z') {
out = '@';
}
serial.write(++out);
last_send = millis();
}
fill(0);
text(((millis()-start)/(float)num_recv+" ms avg"), 0, height/2);
text(max_latency+" ms max", 0, height/2+20);
}