Zeigen Sie benutzerdefinierte Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an

Einführung

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.

1602 LCD benutzerdefinierte Zeichenfunktion

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)

Programm

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.

userdefinedfontsample.png

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);
    }
}

Kompilieren und ausführen

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:~ $

lcd.png

Recommended Posts

Zeigen Sie benutzerdefinierte Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an
Zeigen Sie Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an
Wie man javafx mit Raspeye ausführt veröffentlicht am 12.07.2020
[Android] Zeigen Sie Bilder und Zeichen auf der Registerkarte ViewPager an
Zeigen Sie die Liste in setDetails mit Federsicherheit auf dem Bildschirm an
Lesen Sie Temperatur / Luftfeuchtigkeit von Raspberry Pi 3 & DHT11 mit Java ab
So reduzieren Sie die Programmlast ein wenig, wenn Sie Zeichen mit JAVA kombinieren
Der Schlüssel zum Ausführen von Docker auf Raspberry Pi 4 (Ubuntu Server 20.04)
Installieren Sie Docker auf Raspberry Pi
Setzen Sie Ubuntu 20.04.1 in Raspberry 4 ein
Minecraft Server auf Raspberry Pi 4
Saisonale Anzeige mit Java-Schalter
Stellen Sie die Sensorinformationen von Raspberry Pi in Java grafisch dar und überprüfen Sie sie mit einem Webbrowser
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Lesen Sie Druck und Temperatur von Raspberry Pi 3 & BMP180 mit Java ab
Installieren Sie MariaDB unter Raspberry Pi OS
Versuchen Sie, CentOS 8 in Raspberry Pi 3 zu integrieren
Programmieren mit Ruby (unterwegs)
Hinweis: JavaMail-Einstellungen in Raspeye
Überlegungen zum Java Persistence Framework 2017 (1)
[Java] Zeigt die Bitfolge an, die in der Bytetypvariablen auf der Konsole gespeichert ist