You will be surprised that the EV3 text display can be tweaked to create an oscilloscope.

The EV3 display

The EV3 has a 178 × 128 pixel Monochrome display. The corners have these coordinates:

  • top-left - (1, 1)
  • bottom-left - (1, 128)
  • top-right - (178, 1)
  • buttom-right - (178, 128)

It can display:

  • 12.8 lines of small text
  • 22 characters long

The small character occupy 10x8 pixels. One character is

  • 9 pixels high
  • 7 pixels wide

For exemple an A is composed of these pixels:

1 2 3 4 5 6 7
    x   x
    x   x
  x       x
  x       x
  x x x x x
x           x
x           x

Characters used

For the oscilloscope we are going to use the vertical bar:

1 2 3 4 5 6 7

the horizontal bar (underscore):

1 2 3 4 5 6 7

x x x x x x x

Display a horizontal line

With this information we are ready to display a horizontal line at position y. We define the variables x and y.

We write backwards. The reason for this is that the 7x9 pixel character is printed on a 8x10 pixel field. In fact the left and the top 1-pixel-wide line is erased.

So we initialize x to 178, and decrement by the caracter width of 7. With regards to y there is a -8 pixel offset.


Display a vertical line

Then we define the vertical(x) function.

So we initialize y to 128, and decrement by the caracter height of 9. With regards to x there is a -4 pixel offset.


Display a grid

Finally we can draw a grid.


Draw a dot

The function write text at (x, y) can place a character at the position (x, y). To draw an arbitrary curve using dots, we could use the dot (.) or the hyphen (-).

But the best way is to use an underscore (_) followed by a space character. The space character is offset by 2 pixels and erases the 6 unused pixels of the underscore. This allows us to draw a dot every 2nd pixel.


The example below draws a diagonal line starting at (1, 1).


Display a scope trace

Now we have all the elements to program an oscilloscope. We start at x=1 and loop until x>175. At each iteration we increase x by 2.

The y value is the angular gyro velocity. We display it numerically on line 1. And we plot it with an offset of 64 to the screen.


With a button press we can acquire a single trace of 88 samples.


Measure continously

We can place it inside a loop and measure continously.


You can download the programs so far: scope.lmsp