Um Zeichen auf dem 1602-LCD anzuzeigen, das über ein in Java geschriebenes Programm mit dem Raspberry Pi verbunden ist, können Sie die von Pi4J bereitgestellte Allzweckbibliothek verwenden. Weitere Informationen hierzu finden Sie in den folgenden Artikeln.
Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java anzeigen
Das 1602 LCD zeigt nicht nur die auf dem ROM vorbereiteten Zeichen an, sondern hat auch die Funktion, aus dem Programm ein Zeichenmuster (** benutzerdefiniertes Zeichen **) zu erstellen und anzuzeigen.
Diese Funktion ist in der im obigen Artikel vorgestellten allgemeinen Bibliotheksklasse nicht implementiert. Daher habe ich versucht, diese Klasse auf benutzerdefinierte Zeichen zu erweitern.
Das 1602 LCD verfügt über einen Speicherbereich namens CGRAM (Character Generator RAM), und in diesem Bereich können bis zu 8 5 x 8 Punktzeichenmuster registriert werden. Jedes registrierte Zeichenmuster kann durch Angabe des Zeichencodes 0 bis 7 angezeigt werden (selbst wenn Sie 8 bis 15 angeben, wird das gleiche Zeichenmuster wie 0 bis 7 angezeigt).
(Zitiert aus Datenblatt)
Um die Verwendung benutzerdefinierter Zeichen zu ermöglichen, habe ich die Klasse I2C1602Lcd erstellt, die von der Klasse com.pi4j.component.lcd.impl.I2CLcdDisplay in der generischen Bibliothek erbt.
I2C1602Lcd.java
import com.pi4j.component.lcd.impl.I2CLcdDisplay;
public class I2C1602Lcd extends I2CLcdDisplay {
protected final boolean LCD_CHR = true;
protected final boolean LCD_CMD = false;
public I2C1602Lcd(int i2cBus, int i2cAddress) throws Exception {
super(2, 16, i2cBus, i2cAddress, 3, 0, 1, 2, 7, 6, 5, 4);
}
public void setCharacterPattern(byte characterCode, byte[] characterPattern) throws Exception {
if (characterCode > 0x08) {
throw new RuntimeException("Invalid character code.");
}
if (characterPattern.length != 8) {
throw new RuntimeException("Wrong character pattern length.");
}
lcd_byte(0x40 | characterCode << 3, LCD_CMD);
for (byte pattern : characterPattern) {
lcd_byte(pattern, LCD_CHR);
}
}
}
Um Zeichen auf dem LCD anzuzeigen, erstellen Sie zunächst eine Instanz der diesmal erstellten I2C1602Lcd-Klasse. Der Konstruktor hat das folgende Format. Geben Sie für i2cBus die I2C-Busnummer und für i2cAddress die Adresse des von Ihnen verwendeten Moduls entsprechend Ihrer Umgebung an.
I2C1602Lcd(int i2cBus, int i2cAddress) throws Exception
Es erbt von der generischen Bibliotheksklasse I2CLcdDisplay von Pi4J, sodass die Methoden dieser Klasse weiterhin mit Instanzen der Klasse I2C1602Lcd verwendet werden können.
Geben Sie den Zeichencode und das Zeichenmuster von benutzerdefinierten Zeichen mit der setCharacterPattern-Methode der I2C1602Lcd-Klasse an.
void setCharacterPattern(byte characterCode, byte[] characterPattern) throws Exception
Der erste Parameter, characterCode, gibt den Zeichencode (0-7) an, der dem benutzerdefinierten Zeichen zugewiesen werden soll.
Der zweite Parameter, characterPattern, gibt ein Array vom Bytetyp mit acht Elementen an, die das Zeichenmuster enthalten. Die folgende Abbildung zeigt ein Beispiel für das anzuzeigende Zeichenmuster und den Wert, der für jedes Element des Arrays festgelegt werden soll.
Das Folgende ist ein einfaches Demo-Programm, das die diesmal erstellte Klasse verwendet. Registrieren Sie drei Arten von Wettermarkierungen als benutzerdefinierte Zeichen und zeigen Sie sie auf dem LCD an.
I2C1602LcdChPatternDemo.java
public class I2C1602LcdChPatternDemo {
private static final int LCD_ROW_1 = 0;
private static final int LCD_ROW_2 = 1;
private static final byte[] patternSunnyMark = {0x04, 0x11, 0x0E, 0x1F, 0x0E, 0x11, 0x04, 0x00};
private static final byte[] patternCloudyMark = {0x0C, 0x1E, 0x0C, 0x00, 0x06, 0x0F, 0x06, 0x00};
private static final byte[] patternRainyMark = {0x0E, 0x1F, 0x0E, 0x00, 0x15, 0x00, 0x15, 0x00};
public static void main(String[] args) throws Exception {
I2C1602Lcd lcd = new I2C1602Lcd(1, 0x27);
lcd.setCharacterPattern((byte)0x00, patternSunnyMark );
lcd.setCharacterPattern((byte)0x01, patternCloudyMark);
lcd.setCharacterPattern((byte)0x07, patternRainyMark );
lcd.write(LCD_ROW_1, "%1X %1X %1X %1X %1X %1X", 0x00, 0x01, 0x07, 0x08, 0x09, 0x0F);
lcd.write(LCD_ROW_2, "%c %c %c %c %c %c" , 0x00, 0x01, 0x07, 0x08, 0x09, 0x0F);
}
}
Um benutzerdefinierte Zeichen tatsächlich auszuprobieren, legen Sie die beiden oben genannten Dateien in einem geeigneten Verzeichnis ab und kompilieren Sie sie.
pi@raspberrypi:~ $ pi4j -c I2C1602LcdChPatternDemo.java
--------------------------------------------
Pi4J - Compiling: I2C1602LcdChPatternDemo.java
--------------------------------------------
+ javac -classpath '.:classes:*:classes:/opt/pi4j/lib/*' -d . I2C1602LcdChPatternDemo.java
pi@raspberrypi:~ $
Führen Sie nach dem Kompilieren die Root-Berechtigungen aus.
pi@raspberrypi:~ $ sudo pi4j I2C1602LcdChPatternDemo
+ java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' I2C1602LcdChPatternDemo
pi@raspberrypi:~ $
Recommended Posts