Page 4 sur 4

Re: LCD KeyPad Shield For Arduino

MessagePosté: 29 Déc 2011 15:12
de Daniel
j'ai enfin reçu cet écran.
3 semaines depuis la Chine, mais pas de frais...
Je n'ai pas encore essayé de le tester.
Dans l'immédiat, je vais commander pour 15$ de plus la plaque de protoptypage à bornier vissant.
Je comptais utiliser une plaque standart pour les essais. Mais mieux vaut construire le mème sandwich que Christian!

Re: LCD KeyPad Shield For Arduino

MessagePosté: 04 Jan 2012 12:24
de Christian
Re,
Une autre façon de parcourir les boutons pressés de ce LCD :
(for + tableau à la place de switch case)
Ce code ajoute aussi des caractères spéciaux et la valeur mesurée des résistances.

Code: Tout sélectionner
/*
    Test LCD 5 boutons DFRobot
Ch.Aubert janv.2012
*/

/************* 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_SELECT[8] = { // Select
  B00000,
  B00000,
  B01110,
  B01110,
  B01110,
  B01110,
  B00000,
  B00000
};
//
byte Char_NONE[8] = { // Char.vide
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  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 int PinLCDBacklight = 10; // broche LCD Backlight
const int PinBouton = 0; // broche analogique (A0) utisé pour les 5 boutons


/************* Constantes programme ****************/
// boutons
const int btnNONE = 0;
const int btnRIGHT = 1;
const int btnLEFT = 2;
const int btnUP = 3;
const int btnDOWN = 4;
const int btnSELECT = 5;

//texte boutons
const char bt_txt[6][10] = {
  "Bt.nul",
  "Bt.droite",
  "Bt.gauche",
  "Bt.haut",
  "Bt.bas",
  "Bt.select" };

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


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

  // création car. spéciaux LCD
  lcd.createChar(0, Char_NONE); // char vide pour bt.none
  lcd.createChar(1, Char_RIGHT);
  lcd.createChar(2, Char_LEFT);
  lcd.createChar(3, Char_UP);
  lcd.createChar(4, Char_DOWN);
  lcd.createChar(5, Char_SELECT);
}

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

  for (int i=0; i<=5; i++)
  {
    lcd.setCursor(0,0);      // placer le curseur à la première ligne, première position
    lcd.print(bt_txt[lcd_key]);  // txt. boutons
    lcd.write(lcd_key); // no. symboles spéciaux LCD
    lcd.print(" ");
    lcd.print(adc_key_in); // valeur A/D résistance bouton
    lcd.print("   ");
    if (lcd_key > 0) old_lcd_key = lcd_key;
  } //end for

  // Dernier bouton utilisé
  if (old_lcd_key > 0){
    lcd.setCursor(0,1);
    lcd.print("Dernier bt = ");
    lcd.write(old_lcd_key); // car. spéciaux lcd
    lcd.print("    ");
  }

}


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

//  Lire la valeur A/D retournée selon le bouton choisi
int read_LCD_buttons()
{
  adc_key_in = analogRead(PinBouton);   
  delay(50);      // wait for debounce time
  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 ...
}

Re: LCD KeyPad Shield For Arduino

MessagePosté: 07 Jan 2012 10:25
de Fredlab
Hello

En ayant l'intention ce matin d'avancer dans le projet, je me suis attelé à l'assemblage de ma plaque de prototypage... mais j'ai du faire une erreur dans la commande :oops:
En fait, je n'ai qu'une "proto shield", exactement à la même dimension que l'Arduino donc il m'est impossible d'ajouter les quelques borniers que j'avais aussi commandés et donc je pense que je vais avoir quelques soucis de gestions d'entrées/sorties et d'empilage avec le LCD shield tout en laissant libre des ports...
bref...
Fredlab a écrit: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à.

... retour à la case départ... j'ai commandé un screw shield en Chine - un temps de latence en plus.
"time is on my side"
On motorisera plus tard :?

(je vais préparer une commande chez Conrad pour finir l'assemblage du stepduino -> branchements divers entre le boitier et les divers éléments extérieurs)

Re: LCD KeyPad Shield For Arduino

MessagePosté: 11 Fév 2012 18:56
de Daniel
Bonsoir,
finalement, j'ai reçu la plaque intermédiaire il y a 2 semaines mais je n'ai pas eu le temps de tester plus tot. Je profite des vacances de février pour m'y remettre.
Après solidarisation de l'écran au dessus de la plaque, le programme test des boutons de l'écran tourne sans problème.

Pour la suite, je vais rebrancher, encore sur la plaque de test, mais en passant par les bornes à vis, la carte de puissance et l'optocoupleur pour faire une série d'images en déclenchant après un pas du moteur.

Est ce que Christian a associé les bouts de programmes dans un programme test bouclant sur: avance d'un pas, déclenchement à chaque appui sur le bouton right par exemple?

Re: LCD KeyPad Shield For Arduino

MessagePosté: 11 Fév 2012 19:12
de Christian
Salut Daniel,

Est ce que Christian a associé les bouts de programmes dans un programme test bouclant sur: avance d'un pas, déclenchement à chaque appui sur le bouton right par exemple?


Vite fait, voir le sujet Stepduino proto et le petit code ici > viewtopic.php?f=284&t=10454#p52816
C'est vraiment très basique comparé à la version sur laquelle je travail actuellement, mais ça permet de tester déjà passablement de choses.

Re: LCD KeyPad Shield For Arduino

MessagePosté: 17 Mar 2013 13:39
de loeil64
bonjour les arduinistes,je suis philippe et je suis nouveau sur ce forum.
je me suis fourni en matériel ARDUINO la semaine dernière dans le but de me fabriquer un stepduino et je voudrai aussi mais plus tard me monter un photoduino.j'ai du boulo!! :idea:
j'ai tout d'abord opté pour : une uno R3 , un shield lcd keypad de la marque dfrobot,d'un moteur pas à pas avec contrôleur 1650v au départ pour faire simple :lol: :lol:
partout il est dis "pas besoin d'être informaticien pour jouer à arduino" heuuu :grat: quand même!
il semblerai qu'il y ait quelques pointures ici, alors je pense que certain d'entre vous ont déjà réalisés ce genre de montage et qu'il existe des sketchs pour faire fonctionner mon matos.
A VOTRE BON CŒUR :D :D :D