====== Afficheurs Grove ====== ===== Afficheur LCD RGB backlight ===== #include #include "rgb_lcd.h" rgb_lcd lcd; // Déclare un objet de type rgb_lcd void setup() { lcd.begin(16, 2); // Fixe le nombre de colonnes (16) et de lignes (2) de l'afficheur } Les fonctions suivantes sont disponibles pour l'objet lcd de type rgb_lcd lcd.setCursor(0, 1); // Place le curseur colonne 0, ligne 1 (la numérotation commence à 0,0) lcd.print("Hello, world!"); // Affiche une chaîne ou une variable lcd.clear(); // Efface l'écran et repositionne le curseur en (0,0) lcd.blink(); // Active le clignotement du curseur lcd.noblink(); // Désactive ce clignotement lcd.autoscroll(); // Active le scrolling lcd.noAutoscroll(); // Désactive le scrolling lcd.cursor(); // Affiche le curseur lcd.noCursor(); // Ne l'affiche pas lcd.display(); // Eteint l'écran lcd.noDisplay(); // Allume l'écran lcd.setRGB(255, 128, 0); // Fixe la couleur de rétro-éclairage en RGB lcd.setPWM(couleur, i); // Fait varier couleur et intensité du rétro-éclairage, i dans [0,255] // Couleurs prédéfinies, en unsigned char : REG_RED, REG_GREEN, REG_BLUE lcd.blinkLED(); // Fait clignoter le rétro-éclairage lcd.noBlinkLED(); // Pas de de clignotement du rétro-éclairage lcd.scrollDisplayLeft(); // Décale l'affichage d'une position vers la gauche lcd.scrollDisplayRight(); // Pareil vers la droite // Ne gère pas le saut de ligne, mais le texte revient dans l'écran par le côté opposé à sa sortie Enfin, on peut créer des caractère personnalisés. // Créer le dessin avant le setup dans une grille de 5x8 pixels byte dessin[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 }; lcd.createChar(n, dessin); // Dans le setup, affecte le dessin au caractère n° n lcd.write(n); // Ensuite, affichage du caractère n // Si besoin, forcer le type : (unsigned char)n ===== Afficheur Barre de LED ===== Cet afficheur est composé de 10 barres (Leds), 8 vertes, 1 orange et 1 rouge.\\ On peut les piloter individuellement ou bien considérer qu'elles représentent un "niveau" entre 0 et 10, soit aucune barre allumée ou bien toutes les barres allumées respectivement, ainsi que toutes les valeurs intermédiaires. Pour définir individuellement l'état des barres, on utilise un masque binaire sur 10 bits. Par exemple le nombre binaire ''0b000000000000101'' soit 5 en décimal correspond à l'allumage des barres 1 et 3.\\ C'est sous cette forme qu'est attendu le paramètre de la fonction setBits et le résultat renvoyé par la fonction getBits. Pour définir un niveau, c'est un entier entre 0 et 10.\\ Le programme suivant utilise toutes les fonctions disponibles : #include Grove_LED_Bar barre(7, 6, 1, LED_BAR_10); // Clock pin, Data pin, Orientation, Type de barre) // Orientation : 1 = Vert à Rouge, 0 = Rouge à Vert - Autre type : LED_CIRCULAR_24 unsigned int etat; void setup() { barre.begin(); barre.setGreenToRed(1); // Change l'orientation : 1 = Vert à Rouge, 0 = Rouge à Vert } void loop() { // Adressage individuel des Leds : setBits, getBits, setLed, toggleLed barre.setBits(0x0); // Eteint toutes les LEDs delay(1000); barre.setBits(0x3ff); // Allume toutes les LEDs, 0b000001111111111 ou 1023 en décimal delay(1000); barre.setBits(0b000000000000001); // Allume LED 1 : peut aussi s'écrire 0x1 en hexa ou 1 en décimal delay(1000); barre.setBits(0b000000000010100); // Allume LED 3 et 5 : soit 0x14 en hexa ou 20 en décimal delay(1000); etat = barre.getBits(); // Lecture de l'état actuel de la barre etat <<= 1; // Décalage à gauche (Led 4 et 6) barre.setBits(etat); delay(1000); etat >>= 2; // Décalage de 2 positions à droite (Led 2 et 4) barre.setBits(etat); delay(1000); barre.setLed(1, 1); // Allume Led 1 barre.setLed(2, 0); // Eteint Led 2 barre.toggleLed(7); // Bascule Led 7 delay(2000); // Adressage des Leds par niveaux for (int i = 0; i <= 10; i++) { barre.setLevel(i); delay(500); } delay(1000); } ===== Afficheur 4 chiffres ===== Dans la bibliothèque TM1637 fournie pour Grove, plusieurs fonctions d'affichage sont disponibles (voir exemples). Ici on utilise displayNum() dont le comportement présente une anomalie (ou un choix des développeurs) : les valeurs 0 ne sont pas affichées. Il est possible de modifier le fichier TM1637.cpp de la bibliothèque pour changer ce comportement : [[diy:grove:programmes#patch_de_la_bibliotheque_grove_pour_tm1637|Patch de la bibliothèque]] ==== Avec la bibliothèque Grove (modifiée) ==== #include "TM1637.h" // Définition des pins pour TM1637 : connecter sur D6 du shield Grove const int CLK = 6; const int DIO = 7; TM1637 afficheur(CLK, DIO); void setup() { afficheur.init(); afficheur.set(BRIGHT_TYPICAL); // BRIGHT_TYPICAL = 2, BRIGHT_DARKEST = 0, BRIGHTEST = 7 } void loop() { int potar = analogRead(A0); int val = map(potar,0,1023,-50, 50); delay(150); afficheur.displayNum(val); } ==== Avec la bibliothèque alternative TM1637Display ==== Bibliothèque de [[https://github.com/avishorp/TM1637|Avishay Orpaz]]\\ [[https://www.makerguides.com/tm1637-arduino-tutorial/|Tuto]] complet avec cette bibliothèque. #include // Définition des pins pour TM1637 : connecter sur D6 du shield Grove const int CLK = 6; const int DIO = 7; TM1637Display afficheur(CLK, DIO); void setup() { afficheur.clear(); afficheur.setBrightness(2); } void loop() { int potar = analogRead(A0); int val = map(potar,0,1023, 0, 100); delay(150); afficheur.showNumberDec(val); }