LCD-Display

Neben Sound, Hintergrundbeleuchtung der Tasten ist das Display die wichtigste Möglichkeit Ausgaben anzuzeigen. Dies können Sensorwerte oder sonstige Kontrollausgaben sein.

Die Auflösung ist 178 x 128 Pixel. Der Koordinatenursprung (0|0) befindet sich links oben.

Lejos stellt die Methode drawString bzw. drawInt für die Ausgabe von Text bzw. einer Ganzzahl zur Verfügung. Möchte man eine float-Zahl (Kommazahl) auf dem Display ausgeben, so muss diese erst in einen String verwandelt werden. Dies geht mit String.valueOf(Sensor.sample[0]), wobei Sensor.sample[0] üblicherweise ein Kommazahl ist. 

Beispiel

Beispielprogramm:

import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;

public class LCDDisplay {
public static void main(String[] args) {
LCD.drawString("Hallo Welt", 1, 1);
Delay.msDelay(5000);
LCD.clear();
}
}

Aufgabe: ein Rechteck zeichnen

Das Display hat eine Breite von 178 und eine Höhe von 128 Pixeln. Ein Pixel  wird mit Hilfe des Befehls LCD.setPixel(x, y, Color) gezeichnet. Der Ursprung (0|0) liegt, wie in der Informatik üblich links oben. Für Color kommt nur schwarz oder weiß in Frage. Es sollte also immer Color = 1 gelten.

Der Programmtext soll zunehmend verallgemeinert werden:

  • zuerst wird ein Rechteck mit vorgegeber Breite und Höhe gezeichnet
  • Höhe, Breite und der Startpunkt mit x-, y-Koordinate soll jeweils in einer  Koordinate gespeichert.
  • Für das Zeichnen eines Rechtecks wird eine eigene Methode geschrieben, die mehrfach aufgerufen werden kann. 
Rechteck zeichnen

Ein Rechteck mit festen Abmessungen

import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;


public class MeinRoboter_4 {

	public static void main(String[] args) {
		for (int i = 0; i < 40; i++) {
			LCD.setPixel(20+ i, 40, 1);
		}	
		
		for (int i = 0; i < 60; i++) {
			LCD.setPixel(60, 40+i, 1);
		}	
		
		for (int i = 0; i < 40; i++) {
			LCD.setPixel(60-i, 100, 1);
		}	
		
		for (int i = 0; i < 60; i++) {
			LCD.setPixel(20, 100-i, 1);
		}		
		Delay.msDelay(5000);
	}
}
Rechteck zeichnen mit Variablen

Abmessungen sind in Variablen gespeichert

import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;


public class MeinRoboter_5 {
/*
 * es wird ein Rechteck gezeichnet, wobei 
 * 		der Startpunkt (x bzw y- Koordinate), 
 * 		die Breite und 
 * 		die Höhe variabel sind		
 */
	
	
	public static void main(String[] args) {
		int breite = 120;
		int hoehe = 50;
		int x = 30;
		int y = 70;
		
		for (int i = 0; i < breite; i++) {
			LCD.setPixel(x + i, y, 1);
		}	
		
		for (int i = 0; i < hoehe; i++) {
			LCD.setPixel(x+breite, y+i, 1);
		}	
		
		for (int i = 0; i < breite; i++) {
			LCD.setPixel(x+breite-i, y+hoehe, 1);
		}	
		
		for (int i = 0; i < hoehe; i++) {
			LCD.setPixel(x, y+hoehe-i, 1);
		}		
		Delay.msDelay(5000);
	}
}
Rechteck zeichnen mit eigener Methode

Für das Zeichnen wird eine Methode geschrieben

import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;


public class MeinRoboter_7 {
	
	public static void main(String[] args) {
		int x= 0;
		for (int i = 0; i < 100; i++) {
			Rechteck(x+i*2,70,20,20);		
			Delay.msDelay(50);
			LCD.clear();
		}
	}
	
	
	public static void Rechteck(int x, int y, int breite, int hoehe){
		for (int i = 0; i < breite; i++) {
			LCD.setPixel(x + i, y, 1);
		}
	
		for (int i = 0; i < hoehe; i++) {
			LCD.setPixel(x+breite, y+i, 1);
		}	
		
		for (int i = 0; i < breite; i++) {
			LCD.setPixel(x+breite-i, y+hoehe, 1);
		}	
		
		for (int i = 0; i < hoehe; i++) {
			LCD.setPixel(x, y+hoehe-i, 1);
		}
	}	
}

LEDs

Die mittleren Buttons sind mit LEDs hinterlegt, diese können programmiert werden.

0 Licht aus  
1 / 2 / 3 statisch grün / rot  / gelb 
4/ 5 / 6   langsam blinken grün / rot  / gelb
7/ 8 / 9 schnell blinken  grün / rot  / gelb
> 9  wie 9   
Beispiel
import lejos.hardware.Button;
import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;
 
public class LCD_Display {
	
	
public static void main(String[] args) {
	int i=0;
	while(Button.ESCAPE.isUp()){
		Button.LEDPattern(i%10);
		LCD.drawString("Hallo Welt", 1, 1);
		LCD.drawInt(i, 1, 3);
		i++;
		Delay.msDelay(500);
		LCD.clear();
	}
	
	if(Button.ESCAPE.isDown()){
		Button.LEDPattern(0);
		System.exit(0);
	}	
}
}

Buttons

Es gibt sechs Tasten:

  • LEFT,
  • RIGHT,
  • DOWN,
  • UP,
  • ENTER,
  • ESCAPE

Mit getID() kann die Ganzzahl-ID der angegebenen Taste abgefragt werden:

  • ID_UP: 1
  • ID_ENTER: 2
  • ID_DOWN: 4
  • ID_RIGHT: 8
  • ID_LEFT: 16
  • ID_ESCAPE: 32

Mit Hilfe der Buttons kann ein kontrollierter Programmabbruch gemacht werden.