devinaconley / arduino-plotter

An Arduino library for easy graphing on host computer via serial communication
MIT License
186 stars 31 forks source link

Use line for smoother graphs #43

Open ratatoeskr666 opened 2 years ago

ratatoeskr666 commented 2 years ago

https://github.com/devinaconley/arduino-plotter/blob/6da8d1b8bf6b311770b3cd030254b5f348d9a5bc/listener/Graph.java#L186

Hi, just an quick&dirty idea, I don't know if there are any caveats using this. For me it worked:

`for ( int j = 0; j < this.currPoints; j++ ) { float x1 = (float)(this.posX + (this.data[j][i][0]xScale - xOffset)); float y1 = (float)(this.posY + yOffset - data[j][i][1]yScale);

    // Skip the first 2 pixels otherwise you will see lines between first and last pixel
    if (j > 0 && x1 > this.posX + 2) {          
      float x2 = (float)(this.posX + (this.data[j-1][i][0]*xScale - xOffset));          
      float y2 = (float)(this.posY + yOffset - data[j-1][i][1]*yScale);
      this.parent.line(x1, y1, x2, y2);
    } else {
      this.parent.point(x1, y1);
    }

}`

This makes the graph rendering smoother if you wish rendering interpolation between the data points.

This is just some kind of contribution. Thank you for this outstanding library and for making it free for all of us! :)

phdv61 commented 2 years ago

The data buffer is a rolling buffer. So, to draw lines and smooth (interpolate) the drawing, it must be done in two halves. I suggested a mod down on this same page.