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.
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)
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.
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);
}
}
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:~ $
Recommended Posts