Afficher les caractères définis par l'utilisateur sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java

introduction

Pour afficher des caractères sur l'écran LCD 1602 connecté au Raspberry Pi à partir d'un programme écrit en Java, vous pouvez utiliser la bibliothèque polyvalente fournie par Pi4J. Pour plus d'informations à ce sujet, reportez-vous aux articles suivants.

Afficher les caractères sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java

L'écran LCD 1602 affiche non seulement les caractères préparés sur la ROM, mais a également la fonction de créer un motif de caractères (** caractère défini par l'utilisateur **) à partir du programme et de l'afficher.

Cette fonctionnalité n'est pas implémentée dans la classe de bibliothèque générique présentée dans l'article ci-dessus, j'ai donc étendu cette classe pour utiliser des caractères définis par l'utilisateur.

1602 Fonction de caractères définie par l'utilisateur LCD

L'écran LCD 1602 a une zone de mémoire appelée CGRAM (Character Generator RAM), et jusqu'à 8 motifs de caractères de 5 x 8 points peuvent être enregistrés dans cette zone. Chaque motif de caractère enregistré peut être affiché en spécifiant le code de caractère 0 à 7 (même si vous spécifiez 8 à 15, le même motif de caractère que 0 à 7 s'affiche).

(Extrait de Data Sheet)

programme

Pour activer l'utilisation de caractères définis par l'utilisateur, j'ai créé la classe I2C1602Lcd, qui hérite de la classe com.pi4j.component.lcd.impl.I2CLcdDisplay dans la bibliothèque générique.

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

Pour afficher des caractères sur l'écran LCD, créez d'abord une instance de la classe I2C1602Lcd créée cette fois. Le constructeur a le format suivant. Pour i2cBus, spécifiez le numéro de bus I2C et pour i2cAddress, spécifiez l'adresse du module que vous utilisez en fonction de votre environnement.

I2C1602Lcd(int i2cBus, int i2cAddress) throws Exception

Comme elle hérite de la classe de bibliothèque générique I2CLcdDisplay de Pi4J, les méthodes de cette classe peuvent toujours être utilisées avec des instances de la classe I2C1602Lcd.

Spécifiez le code de caractère et le modèle de caractère des caractères définis par l'utilisateur avec la méthode setCharacterPattern de la classe I2C1602Lcd.

void setCharacterPattern(byte characterCode, byte[] characterPattern) throws Exception

Le premier paramètre, characterCode, spécifie le code de caractère (0-7) à affecter au caractère défini par l'utilisateur.

Le deuxième paramètre, characterPattern, spécifie un tableau de type octet avec huit éléments contenant le modèle de caractère. La figure ci-dessous est un exemple du modèle de caractère à afficher et de la valeur à définir pour chaque élément du tableau.

userdefinedfontsample.png

Ce qui suit est un simple programme de démonstration utilisant la classe créée cette fois. Enregistrez trois types de marques météorologiques en tant que caractères définis par l'utilisateur et affichez-les sur l'écran LCD.

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

Compiler et exécuter

Pour essayer réellement les caractères définis par l'utilisateur, placez les deux fichiers ci-dessus dans un répertoire approprié et compilez.

pi@raspberrypi:~ $ pi4j -c I2C1602LcdChPatternDemo.java
--------------------------------------------
Pi4J - Compiling: I2C1602LcdChPatternDemo.java
--------------------------------------------
+ javac -classpath '.:classes:*:classes:/opt/pi4j/lib/*' -d . I2C1602LcdChPatternDemo.java
pi@raspberrypi:~ $

Après la compilation, exécutez avec les privilèges root.

pi@raspberrypi:~ $ sudo pi4j I2C1602LcdChPatternDemo
+ java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' I2C1602LcdChPatternDemo
pi@raspberrypi:~ $

lcd.png

Recommended Posts

Afficher les caractères définis par l'utilisateur sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java
Afficher les caractères sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java
Comment exécuter javafx avec Raspeye publié le 12/07/2020
[Android] Afficher les images et les caractères dans l'onglet ViewPager
Afficher la liste en setDétails à l'écran avec ressort-sécurité
Lire la température / l'humidité avec Java de Raspberry Pi 3 & DHT11
Comment réduire même un peu la charge du programme lors de la combinaison de caractères avec JAVA
La clé pour exécuter Docker sur Raspberry Pi 4 (serveur Ubuntu 20.04)
Installez Docker sur Raspberry Pi
Mettez Ubuntu 20.04.1 dans Raspberry 4
Serveur Minecraft sur Raspberry Pi 4
Affichage saisonnier avec commutateur Java
Représentez graphiquement les informations du capteur de Raspberry Pi en Java et vérifiez-les avec un navigateur Web
J'ai essayé d'afficher le calendrier sur la console Eclipse en utilisant Java.
Lire la pression et la température de Raspberry Pi 3 et BMP180 avec Java
Installez MariaDB sur le système d'exploitation Raspberry Pi
Essayez de mettre CentOS 8 dans Raspberry Pi 3
Programmation avec ruby (en route)
Remarque: paramètres javaMail dans Raspeye
Considération sur le framework de persistance Java 2017 (1)
[Java] Afficher la chaîne de bits stockée dans la variable de type d'octet sur la console