Outils pour utilisateurs

Outils du site


diy:grove:afficheurs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
diy:grove:afficheurs [2020/04/03 17:27] – créée jbpueldiy:grove:afficheurs [2020/04/03 17:40] (Version actuelle) – [Afficheur 4 chiffres] jbpuel
Ligne 1: Ligne 1:
 ====== Afficheurs Grove ====== ====== Afficheurs Grove ======
  
 +===== Afficheur LCD RGB backlight =====
  
 +<code C++>
 +#include <Wire.h>
 +#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
 +}
 +</code>
 +Les fonctions suivantes sont disponibles pour l'objet lcd de type rgb_lcd
 +<code C++>
 +    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
 +</code>
 +Enfin, on peut créer des caractère personnalisés.
 +<code C++>
 +// 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
 +</code>
 +
 +===== 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 :
 +
 +<code C++>
 +#include <Grove_LED_Bar.h>
 +
 +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);
 +}
 +</code>
 +
 +===== 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) ====
 +
 +<code C++>
 +#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);
 +}
 +</code>
 +
 +==== 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.
 +
 +<code C++>
 +#include <TM1637Display.h>
 +
 +// 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);
 +}
 +</code>
diy/grove/afficheurs.1585934861.txt.gz · Dernière modification : 2020/04/03 17:27 de jbpuel