LCD KeyPad Shield For Arduino

Re: LCD KeyPad Shield For Arduino

Messagede Keyz » 28 Déc 2011 07:13

Code: Tout sélectionner
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};
void setup() {
lcd.createChar(0, smiley);
lcd.begin(16, 2);
lcd.write(0);
}
void loop() {}


Cet exemple de création d'un smiley dans la CGRAM (Caracter Generator RAM), qui permet de customiser 8 caractères de matrice 5x8 pixels, soit au total 64 octets; commence à l'adresse 64 (0×40 en hexa) et se termine donc à 127 (0×7F en hexa).
Les cinq LSB(Least Significant Bits) bits de poids faible, de chaque octet déterminent les pixels dans chaque rangée.

http://arduino.cc/fr/Main/LcdcreateChar

cet exemple fonctionne avec une version 22 (Arduino v22) mais pas avec la dernière mouture Arduino 1.0
à moins de remplacer
Code: Tout sélectionner
lcd.write(0);

par
Code: Tout sélectionner
lcd.write((uint8_t)0);

le problème est que 0(zero) peut être un uint8_t ou un char *


la version 1.0 a apporté des modifications à l'api arduino, le fichier WProgram.h se nomme désormais Arduino.h, les classes Print, Serial, ... ont été modifiées.
A l'heure actuelle AUCUNE librairie réalisée pour les versions 0023, 0022 ... ne peut se compiler sous l'arduino IDE 1.0.
Le problème que Fred et moi avions rencontré viendrait donc de là!
http://23-7.net/2011/12/arduino-1-0/
Dernière édition par Keyz le 28 Déc 2011 08:02, édité 1 fois.
Keyz
membre
membre
 
Messages: 4
Inscription: 22 Déc 2011 00:21
Prénom: Matthieu

Re: LCD KeyPad Shield For Arduino

Messagede Christian » 28 Déc 2011 08:01

Merci Mathieu pour les précisions de compatibilité entre version du soft Arduino (c'est un peu ennuyeux, mais pas dramatique ...)
Autrement, c'est marrant que tu proposes cette possibilité de création de caractères spéciaux "graphiques" car j'avais déjà préparé un code pour montrer cela.
Celui-ci créé 4 flèches (haut, bas, gauche, droite, et un carré (select)
J'espère que Fred ne va pas s'arracher les cheveux car là ça se charge un peu ... :mrgreen:
Mais en fait c'est très simple, il suffit de "dessiner" le symbole en plaçant des 1 ou des 0, puis de le déclarer. La librairie LiquidCrystal s'occupe du reste.
Perso je m'aide sur une feuille de papier en dessinant les pixels sur un quadrillage de 5 de large x 8 de haut.

Remarquez au passage le magnifique coup de peinture rouge sur le bouton Reset ! :)
Du vert ou du bleu sur "Select" compléterait bien ...

LCD_Car_Speciaux.jpg
Exif et Meta MicroCartouche LCD_Car_Speciaux.jpg (121.34 Kio) Vu 14961 fois


Et le code (qui fonctionne bien avec la dernière version du soft Arduino, 1.0) :

Code: Tout sélectionner
/*******************************************************
* Test activation/désactivation retro-éclairage LCD 5 boutons DFRobot
* Création de caractères spéciaux LCD
* Ch.Aubert, Dec. 2011
*
********************************************************/


/************* Librairie(s) à inclure ****************/
#include <LiquidCrystal.h>

/****************   Définir des caractères spéciaux LCD (8 caractères max) ********************/

byte Char_UP[8] = { // Flèche haut (tableau de 8 octets)
  B00000, // définition de chaque octet au format binaire
  B00000, // 1 pour pixel affiché - 0 pour pixel éteint
  B00100, // les 3 bits de poids forts ne sont pas écrits car inutiles
  B01110,
  B11111,
  B00000,
  B00000,
  B00000
};
//
byte Char_DOWN[8] = { // Flèche bas
  B00000,
  B00000,
  B11111,
  B01110,
  B00100,
  B00000,
  B00000,
  B00000
};
//
byte Char_RIGHT[8] = { // Flèche droite
  B00000,
  B00000,
  B10000,
  B11000,
  B11100,
  B11000,
  B10000,
  B00000
};
//
byte Char_LEFT[8] = { // Flèche gauche
  B00000,
  B00000,
  B00001,
  B00011,
  B00111,
  B00011,
  B00001,
  B00000
};
//
byte Char_ENTER[8] = { // Enter
  B00000,
  B00000,
  B01110,
  B01110,
  B01110,
  B01110,
  B00000,
  B00000
};
/****************  Fin caractères spéciaux LCD ********************/


/************* Définition des broches (pins) du LCD 5 boutons DFRobot  ****************/
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
const byte PinLCDBacklight = 10; // broche LCD Backlight
const byte PinBouton = 0; // broche analogique (A0) utisé pour les 5 boutons


/************* Définition des autres E/S ****************/
//const byte PinLedArduino = 13; // Led sur circuit Arduino



/************* Constantes programme ****************/
const byte btnRIGHT = 0; // define some values used by the panel and buttons
const byte btnUP = 1;
const byte btnDOWN = 2;
const byte btnLEFT = 3;
const byte btnSELECT = 4;
const byte btnNONE = 5;


/************* Variables ****************/
byte  lcd_key = 0;
int  adc_key_in = 0;


/************* Setup ****************/
void setup()
{
  lcd.begin(16, 2);        // initialiser la LCD library, 16 caractères, 2 lignes
  //pinMode(PinLedArduino, OUTPUT);

  lcd.createChar(1, Char_UP); // création du caractère LCD personnalisé numéro 1, etc ...
  lcd.createChar(2, Char_DOWN); // A placer après "LCD.begin"  (ou .init) sinon ça bug !!
  lcd.createChar(3, Char_RIGHT);
  lcd.createChar(4, Char_LEFT);
  lcd.createChar(5, Char_ENTER);

  pinMode(PinLCDBacklight, OUTPUT); // Broche LCD backlight en sortie
  digitalWrite(PinLCDBacklight, HIGH); // Retro-éclairage actif (par défaut il est déjà mais je le justifie ici)


}


/************* Boucle principale ****************/
void loop()
{
  lcd.setCursor(0,0);      // placer le curseur à la première ligne, première position
  lcd.print("LCD backlight"); // texte d'accueil
  lcd.setCursor(0,1);            // placer le curseur au début de la seconde ligne

  lcd.print("On"); // texte boutons
  lcd.write(4); // fl.gauche
  lcd.print(" Off"); // texte boutons
  lcd.write(3); // fl.droite

  lcd_key = read_LCD_buttons();  // lire la valeur du bouton (->fonction)

  switch (lcd_key)               // selon le bouton appuyé ...
  {
  case btnRIGHT:
    {
      digitalWrite(PinLCDBacklight, LOW); // Retro-éclairage éteint
      //lcd.noDisplay(); // désactive l'affichage texte
      break;
    }
  case btnLEFT:
    {
      digitalWrite(PinLCDBacklight, HIGH); // Retro-éclairage actif
      //lcd.display(); // active l'affichage texte
      break;
    }
  case btnUP:
    {
      break;
    }
  case btnDOWN:
    {
      break;
    }
  case btnSELECT:
    {
      break;
    }
  case btnNONE:
    {
      break;
    }
  }

}

/************* Sous programmes ****************/




/************* Fonctions ****************/

//  Lire la valeur A/D retournée selon le bouton choisi
int read_LCD_buttons()
{
  adc_key_in = analogRead(PinBouton);   
  if (adc_key_in > 1000) return btnNONE; // On commence par la valeur la plus probable : Aucun appui sur bouton !
  if (adc_key_in < 50)   return btnRIGHT; 
  if (adc_key_in < 195)  return btnUP;
  if (adc_key_in < 380)  return btnDOWN;
  if (adc_key_in < 555)  return btnLEFT;
  if (adc_key_in < 790)  return btnSELECT;   
  return btnNONE;  // si aucun appui sur bouton, on retoune la constante btnNONE ...
}

Edit: Renumérotation des caractères spéciaux (de 1 à 5)
Bien amicalement, Christian
Microscope : Leitz Ortholux I - Stéréomicroscope : Novex AP5 - Divers bancs macro
Photos: Nikon (D70) D90, Canon A75, MicCam Tucsen 3 mpx
Soft: Photoshop - MicroCartouche - Helicon focus -Stepduino (stacking automatisé)
Site perso (ancien) ici

Avatar de l’utilisateur
Christian
Coadmin
Coadmin
 
Messages: 4790
Inscription: 28 Aoû 2007 20:54
Localisation: Entre Alpes et Jura
Prénom: Christian

Re: LCD KeyPad Shield For Arduino

Messagede Fredlab » 28 Déc 2011 10:10

Hello

Un grand merci à Matthieu le traducteur d'algonquin et à Christian pour toutes vos précisions et le lignes de code qui vont avec.

- Pour le passage "pde" -> "ino", le copier/coller depuis un éditeur de texte, ça marche.
- Pour les librairies, je commence à comprendre... la version de mon logiciel est différente (1.0 - la plus récente) et certaines librairies, extérieures (celle du LCD DFRobot par exemple) sont incompréhensibles pour ce logiciel.
... encore heureux que certains trouvent un moyen de détourner le problème (et dans le cas du LCD DFRobot, la librairie "interne" <LiquidCrystal.h> semble fonctionner)
- en est-il de même pour d'éventuelles librairies pour des cartes de puissance ?

Je vais essayer de faire fonctionner l'écran en-dehors de l'Arduino (je n'ai toujours pas monté le shield de prototypage... j'attends quelques recommandations - avec l'écran enfiché sur l'Arduino, je n'avais accès à aucun port pour tester quoi que ce soit)
Ensuite, j'essaye de comprendre le code fourni par Christian et je teste.
Eventuellement, je regarderais pour rajouter un menu de plus, celui du "bipper" - un piezo sur un autre port...
La planète peut pourvoir aux besoins de tous, mais non pas satisfaire la cupidité de certains (Gandhi)
Avatar de l’utilisateur
Fredlab
membre
membre
 
Messages: 9616
Inscription: 27 Juin 2010 13:42
Localisation: Auxonne (21)
Prénom: Frederic

Re: LCD KeyPad Shield For Arduino

Messagede Christian » 28 Déc 2011 10:30

@ Fred
... en est-il de même pour d'éventuelles librairies pour des cartes de puissance ?


Je vais m'y mettre sou peu ! (j'ai déjà repéré pas mal de choses)
En fait il n'y a pas de librairies toute faites ou officiels pour les cartes de puissance que nous avons commandé (Pololu ou Sparkfun).
Mais la programmation de base est très simple et ces 2 drivers possèdent une puce préprogrammée, donc la plupart du travail est fait en interne par celle-ci ;)
(cela n'empêche pas qu'une librairie dédiée serait pratique pour des opérations plus complexes, à voir ...)
En revanche il faut faire attention au préréglage de ces drivers (ampérage), je tâcherai de vous expliquer tout ça, dans un sujet dédié bien sûr !

Pour le shield de prototypage que j'avais proposé au début du fil Stepduino part.1, ben ... il est pas génial finalement ... (le "SrewShield" est bien plus intéressant)
Je poste un topo plus tard. (ne soude pas tout de suite)
Bien amicalement, Christian
Microscope : Leitz Ortholux I - Stéréomicroscope : Novex AP5 - Divers bancs macro
Photos: Nikon (D70) D90, Canon A75, MicCam Tucsen 3 mpx
Soft: Photoshop - MicroCartouche - Helicon focus -Stepduino (stacking automatisé)
Site perso (ancien) ici

Avatar de l’utilisateur
Christian
Coadmin
Coadmin
 
Messages: 4790
Inscription: 28 Aoû 2007 20:54
Localisation: Entre Alpes et Jura
Prénom: Christian

Re: LCD KeyPad Shield For Arduino

Messagede Fredlab » 28 Déc 2011 10:40

Bon... Christian, si tu es dans les parages, tu vas pouvoir m'aider.
J'ai déclipsé l'écran de l'Arduino.
J'ai branché des fils pour relier l'Arduino à l'écran, en respectant - a priori - les pins
Je branche l'Arduino, l'écran s'allume... pas de texte dessus (alors qu'hier, il y avait encore quelque chose)
Je copie/colle ton code pour le controle du backlight puis je l'envoie à l'Arduino -> rien de plus.

Une idée ?

(les ports A0 - 4-5-6-7-8-9 + 10 + reset + GND (à côté du 13) sont branchés)
(j'ai oublié quelque chose ?)
La planète peut pourvoir aux besoins de tous, mais non pas satisfaire la cupidité de certains (Gandhi)
Avatar de l’utilisateur
Fredlab
membre
membre
 
Messages: 9616
Inscription: 27 Juin 2010 13:42
Localisation: Auxonne (21)
Prénom: Frederic

Re: LCD KeyPad Shield For Arduino

Messagede Christian » 28 Déc 2011 10:51

As-tu essayé de le brancher directement sur l'Arduino et chargé mon dernier code, celui-ci n'implique aucune autre connexion. On verra déjà si tout fonctionne bien !
NB: La libraire LiquidCrystal que j'utilise est bien celle installée par défaut avec le soft Arduino ver. 1.0 !
Bien amicalement, Christian
Microscope : Leitz Ortholux I - Stéréomicroscope : Novex AP5 - Divers bancs macro
Photos: Nikon (D70) D90, Canon A75, MicCam Tucsen 3 mpx
Soft: Photoshop - MicroCartouche - Helicon focus -Stepduino (stacking automatisé)
Site perso (ancien) ici

Avatar de l’utilisateur
Christian
Coadmin
Coadmin
 
Messages: 4790
Inscription: 28 Aoû 2007 20:54
Localisation: Entre Alpes et Jura
Prénom: Christian

Re: LCD KeyPad Shield For Arduino

Messagede Fredlab » 28 Déc 2011 11:02

J'ai remis le LCD sur l'Arduino
J'ai l'affichage du texte...
si j'appuie sur le bouton de gauche, ça allume le LCD (bouton "On") et si j'appuie sur le bouton de droite ("Off"), alors le rétroéclairage s'éteint.

... étape suivante : si on veut dépasser les deux choix (qui seraient validés par un bouton ou un autre), il faudrait avoir dans la ligne du bas qu'une option ("On" par exemple) et avec une des deux touches, gauche ou droite, on bascule vers l'autre option (ou "x" autres options -> menu "défilant" de gauche à droite ou inversement) et on valide le choix par le bouton "Select" :grat:

Depuis lundi, je suis sensé me pencher sur les nouveaux programmes de TermS :?

signé "Fredlab, la mouche du coche" :oops:
La planète peut pourvoir aux besoins de tous, mais non pas satisfaire la cupidité de certains (Gandhi)
Avatar de l’utilisateur
Fredlab
membre
membre
 
Messages: 9616
Inscription: 27 Juin 2010 13:42
Localisation: Auxonne (21)
Prénom: Frederic

Re: LCD KeyPad Shield For Arduino

Messagede Fredlab » 28 Déc 2011 13:20

Je rebondis sur cette partie de post
Christian a écrit:Pour le shield de prototypage que j'avais proposé au début du fil Stepduino part.1, ben ... il est pas génial finalement ... (le "SrewShield" est bien plus intéressant)
Je poste un topo plus tard. (ne soude pas tout de suite)


Si on ne veut pas se casser la nenette, on achète celui-là ?

Enfin, je pense quand même utiliser les pièces qui sont déjà là.
La planète peut pourvoir aux besoins de tous, mais non pas satisfaire la cupidité de certains (Gandhi)
Avatar de l’utilisateur
Fredlab
membre
membre
 
Messages: 9616
Inscription: 27 Juin 2010 13:42
Localisation: Auxonne (21)
Prénom: Frederic

Re: LCD KeyPad Shield For Arduino

Messagede Christian » 28 Déc 2011 14:30

Re Fred,
J'ai celui-ci > http://www.dfrobot.com/index.php?route= ... uct_id=468, c'est visiblement le même.
Le problème avec l'autre http://www.lextronic.fr/P20509-kit-prot ... o-uno.html c'est qu'il s'empile mal sur l'Arduino Uno si on met directement des barrettes mâles/femelles pour empiler (il touche le port USB et c'est dangereux !)
Il peut être utilisable quand même avec des barrettes plus hautes, et/ou les composants sont bien utiles pour les tests sur "breadboard" (boutons, Leds et résistances) ...
Le "SrewShield" a surtout l'avantage des sorties sur borniers, bien pratique en phase d'essais, et pourquoi pas définitif !
Sa partie pastillée est visible ici > viewtopic.php?f=285&t=10421&p=52452#p52441
Bien amicalement, Christian
Microscope : Leitz Ortholux I - Stéréomicroscope : Novex AP5 - Divers bancs macro
Photos: Nikon (D70) D90, Canon A75, MicCam Tucsen 3 mpx
Soft: Photoshop - MicroCartouche - Helicon focus -Stepduino (stacking automatisé)
Site perso (ancien) ici

Avatar de l’utilisateur
Christian
Coadmin
Coadmin
 
Messages: 4790
Inscription: 28 Aoû 2007 20:54
Localisation: Entre Alpes et Jura
Prénom: Christian

Re: LCD KeyPad Shield For Arduino

Messagede pierre4fun » 28 Déc 2011 22:43

Les essais avec les codes de Christian donnent sur mon LCD:

Le 1er code qui affiche les valeurs de touches fonctionne pour les 4 touches de direction
Le Code pour allumer éteindre fonctionne.
Amicalement, Pierre
pierre4fun
membre
membre
 
Messages: 734
Inscription: 28 Oct 2009 20:18
Prénom: Pierre
Skype: pierre4fun

PrécédenteSuivante

Retourner vers Afficheurs LCD et modules de saisie (boutons, joystick, ..)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité