writeRegister()
Bibliothèque graphique pour shield Uno/Mega
Permet d'écrire dans un registre du driver
Exemples d'utilisation
writeRegister(0x21); // Inversion des couleurs sur un ILI9341 writeRegister(0x26); writeData8(0x01); // Correstion "gama curve 1" pour un ili9341 writeRegister(0x37); writeData16(x); // Décalage vertical de X lignes pour un ili9341 writeRegister(0xD3); readData8Bits(); readData8Bits(); num=(readData8Bits()<<8)+readData8Bits(); // Lecture du l'Id du driver ILI9341
Référence
void writeRegister(byte registre);
Paramètre passé
registre: numéro du registre
Valeur retournée
Aucune
Voir aussi
- writeData8() Écrit un octet de donnée dans l'afficheur
- writeData16() Écrit un word de donnée dans l'afficheur
- readData8Bits() Lit un octet de donnée de l'afficheur
Notes
Ces fonctions permettent de tout faire concernant l'afficheur, quel que soit le driver présent. En programmant directement les registres des drivers, tout est disponible.
Exemples
Avec un ILI9341:
// Ce programme montre qu'avec les fonctions de bas niveau, on arrive à toutes les possibilités du driver
#include <PxGraph_ILI9341_Shield.h> // Voir http://arduino.dansetrad.fr/PxGraph
void setup()
{
setGraphMode(PAYSAGE); // Obligatoire pour utiliser l'afficheur
// Affichage d'un fond d'écran. En BPX parce que cela va plus vite.
bpxDraw("320x240/1.bpx",0,0)* // Affiché seulement en mode paysage
bpxDraw("240x320/20.bpx",0,0) // Affiché seulement en mode portrait}
!=0) // On n'a pas pu dessiner une image, on dessine n'importe quoi
for (int y=0; y<HAUTEUR; y+=10) for (int x=0; x<LARGEUR; x+=10) fillRect(x, y, x+10, y+10, random(WHITE));
// Un premier exemple d'accès aux registres de l'afficheur: lecture du code du pilote
setTextSize(9); setTextBold(4); // Ecrire en gros
setTextCursor(DEMI_LARGEUR-180/2, // 4 caractères font en moyenne 4*5*setTextSize=180 de large, on les met au centre
DEMI_HAUTEUR-63/2); // Les caractères font 7*setTextSize=63 de haut, mis au centre
writeRegister(0xD3); // Envoi de la commande D3 (ID code?)
readData8(); // Première valeur non valide
readData8(); // Valeur nulle
text(String(readData8(), HEX)); // Poids forts à lire à lire (en hexadécimal!)
text(String(readData8(), HEX)); // Poids faibles à lire à lire (en hexadécimal!)
}
void loop()
{
// Un deuxième exemple d'accès aux registres de l'afficheur
writeRegister(0x21); // Display Inversion ON (21h), inversion des couleurs
delay(2000);
writeRegister(0x20); // Display Inversion OFF (20h), couleurs normales
delay(2000);
}
Résultat:
Avec un ST7781:
// Ce programme montre qu'avec les fonctions de bas niveau, on arrive à toutes les possibilités du driver
#include <PxGraph_ST7781_Shield.h>
void setup()
{
setGraphMode(PAYSAGE); // Obligatoire pour utiliser l'afficheur
// Affichage d'un fond d'écran. En BPX parce que cela va plus vite.
if (
bpxDraw("320x240/1.bpx",0,0)* // Affiché seulement en mode paysage
bpxDraw("240x320/20.bpx",0,0) // Affiché seulement en mode portrait}
!=0) // On n'a pas pu dessiner une image, on dessine n'importe quoi
for (int y=0; y<HAUTEUR; y+=10) for (int x=0; x<LARGEUR; x+=10) fillRect(x, y, x+10, y+10, random(WHITE));
// Un premier exemple d'accès aux registres de l'afficheur: lecture du code du pilote
byte pilote1, pilote2; // ID du pilote
setTextSize(9); setTextBold(4); // Ecrire en gros
setTextCursor(DEMI_LARGEUR-180/2, // 4 caractères font en moyenne 4*5*setTextSize=180 de large, on les met au centre
DEMI_HAUTEUR-63/2); // Les caractères font 7*setTextSize=63 de haut, mis au centre
writeRegister(0x00); // Envoi de la commande 00 (ID code?)
// Lecture préalable des codes, text() faisant appels aux registres
readData8(); // Première valeur non valide
pilote1=readData8(); // Poids faibles à lire à lire
pilote2=readData8(); // Poids forts à lire à lire
text(String(pilote2, HEX)); // Poids forts en hexadécimal!
text(String(pilote1, HEX)); // Poids faibles en hexadécimal!
}
void loop()
{
// Un deuxième exemple d'accès aux registres de l'afficheur
writeRegister(0x07); // Idle Mode OFF = Mode 8 couleurs OFF
writeData16(0x0133);
delay(2000);
writeRegister(0x07); // Idle Mode ON = Mode 8 couleurs ON
writeData16(0x013B);
delay(2000);
}
Résultat:
Côté technique
L'accès aux registres permet d'utiliser des fonctionnalités qui ne sont pas prévues dans la bibliothèque. On peut par exemple accéder au couleurs 18 bits, au mode 8 bits, enregistrer et lire des valeur en mémoire du driver (3 octets max), voir les codes du constructeur...
Pour programmer le driver de l'afficheur, il faut envoyer la valeur d'un registre par writeRegister(), envoyer éventuellement des paramètres par writeData8() ou writeData16(), ou lire une ou plusieurs valeurs par readData8Bits(). Bien entendu, il est indispensable d'avoir la documentation du driver.
Ces fonctions sont les fonctions de base de la bibliothèque.