Skip to content
This repository was archived by the owner on Feb 17, 2024. It is now read-only.

Using the LCD

mob41 edited this page Jan 16, 2017 · 10 revisions

The library provides an LCDGraphics class to deal with the LCD. This is a experimental but powerful feature in the library.

All the methods in LCDGraphics should be working as expected. But the performance on Graphics rendering is really slow. If you encounter problems with the LCD, please post a issue to let me know.

Usage

If you know how to use with Graphics2D, you are in the right way with LCDGraphics. LCDGraphics is just a implementation of Graphics2D. If possible, you can even hook it to other graphics libraries (i think...)

LCD lcd = new LCD(); //Creates an ev3dev LCD instance.

LCDGraphics g = new LCDGraphics(lcd); //Creates the LCDGraphics class

//Although you are able to set colors other than BLACK and WHITE,
//the result is only BLACK and WHITE, and if there will be problems
//if color images are specified.
g.setColor(Color.BLACK);
g.drawLine(0, 0, 100, 30); //Draws a line from (0,0) to (100,30)
g.fillRect(50, 50, 25, 25); //Draws a 25x25 rectangle at (50,50)
g.drawString("Hello World, ev3dev!", 0, 100); //Draws the string at (0, 100)

g.flush(); //Applies the graphics to the LCD

VirtualLCD for development

The library provides a VirtualLCD to emulate the graphics on the computer before the ev3.

VirtualLCD lcd = new VirtualLCD();
lcd.showVLCD(); //Shows an UI of the virtual LCD

LCDGraphics g = new LCDGraphics(lcd);
g.setBlackColor(); //Alternative
g.drawLine(0, 0, 100, 30); //Draws a line from (0,0) to (100,30)
g.drawRect(50, 50, 50, 50); //Draws a 50x50 rectangle at (50,50)
g.flush(); //Applies the graphics to the LCD

It should be like this:

ev3virtuallcd_image

Advanced

The library also allows you to draw directly to the buffer. More details please refer to http://www.ev3dev.org/docs/tutorials/using-ev3-lcd/

LCD lcd = new LCD();

final int SCREEN_WIDTH = 178;
final int SCREEN_HEIGHT = 128;
final int LEN = 24;
final int SIZE = 3072;
byte[] arr = new byte[SIZE];

//0xff (1) = BLACK
//0x00 (0) = WHITE

//Draws a horizontal line to row 5 to the end of the screen
for (int i = 0; i < SCREEN_WIDTH; i++){
    arr[5 * LEN + i] = (byte) 0xff; //Fill with BLACK
}

lcd.draw(arr);

Development stage of LCDGraphics

The LCDGraphics class is still experimental, still requires graphics performance optimizations.

  • Rewrite a method to read pixels data directly, not to use getRGB() method, as it is so unnecessary and it lowers down the performance. (LCDGraphics.flush() method)
Clone this wiki locally