Go Down

Topic: votre aide pour un code démo de clavier 4x4 en I2C svp (Read 441 times) previous topic - next topic

didiersee

 :'( Bonjour je désespère de trouver un code démo de clavier 4x4 souple avec un module tout fait chinois ici .
J'ai trouvé pas mal de vidéo et site perso mais sur base du PCF8574 seul. Ou alors je trouve des démos sur des sites asiatiques mais alors là j'ai des problèmes de librairies qui ne conviennent pas ou de code inadapté à mon matériel.
Y a t-il quelqu'un qui pourrait me transmettre un code minimal avec éventuellement des librairies qui fonctionne pour faire des essais svp. je suis sur arduino UNO et souhaite réaliser un boitier avec LCD et clavier 4x4 en I2C. le LCD fonctionne déjà en I2C il est équipé de I2C d'origine.

Merci pour votre aide. ::)


didiersee

Déjà quand je fais une recherche en suivant le code de votre lien pour obtenir la bibliothèque ça ne fonctionne pas.
via croquis "inclure bibliothèque" je ne trouve rien pour i2ckeypad.h ?
Un autre site ou tout fonctionne peut-être?


didiersee

J'ai téléchargé les librairies suivant votre lien puis à l'usage le code de votre lien est plein d'erreur. Je souhaite un code de base et des librairies opérationnelles qui fonctionnent pour apprendre et démarrer mon projet. Malheureusement rien ne fonctionne actuellement.

lesept

On ne peut pas le faire pour toi et il semble que tu ne trouveras rien de tout cuit sur le net. Poste le code que tu as choisi pour l'instant (entre balises CODE, la touche </> : au besoin lis les messages épinglés en haut du forum), en expliquant le plus précisément possible les problèmes que tu rencontres, et on pourra t'aider à adapter ce code à ton besoin et à le faire fonctionner. C'est comme ça que tu apprendras...

"Le plus précisément possible" veut dire : précise bien ton besoin, la différence entre ce que tu as et ce que tu veux, si ça ne compile pas poste l'ensemble des messages du compilo (entre balises CODE aussi pour une meilleure lisibilité), précise le type de carte que tu utilises, les capteurs ou modules éventuels, l'alimentation si ce n'est pas via le port USB du PC, tout ce que tu jugeras utile (plus on aura de détails, plus facilement on pourra t'aider, sans avoir à te poser des questions qui feront perdre du temps).
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

hbachetti


Le lien qu'a fourni dfgh convient parfaitement.

La librairie Keypad_I2C permet de gérer un PCF8574 et l'exemple HelloKeypad_I2C se compile parfaitement bien.

Il suffit de le modifier pour prendre en compte un clavier 16 touches.

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

didiersee

En fait j'ai presque terminé un système d'alarme avec arduino MEGA 4 catpteurs PIR, un contact de porte, un module GSM sim900. tout fonctionne correctement avec un seul clavier et un seul LCD 2x16 lui déjà en I2C. Le problème est que si je garde mon raccordement 8 fils pour le clavier+4 fils pour I2C du LCD+1 fil pour led verte+ 1fil pour led rouge+1 fil pour buzzer= 15 fils en tout alors que je souhaite ne pas passer à + de 8flis (câble RJ45). Donc avec clavier et keypad en I2C ce n'est que 4 fils+3 fils pour 2 leds et 1 buzzer c'est parfait.
Voici comme demandé le code que j'ai téléchargé
Code: [Select]
/* @file HelloKeypad.pde
   Revised to use I2C i/o Feb 26/12 - G. D. Young
   Re-check with Keypad 3.0, arduino 1.0.1 Jul 29/12
   Add port-type parameter to constructor for Paul
   Williamson's modification of the Keypad_I2C library Sept 2/13
|| @version 1.0
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | Demonstrates the simplest use of the matrix Keypad library.
|| #
*/
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <Wire.h>
#define I2CADDR 0x22

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0, 1, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6}; //connect to the column pinouts of the keypad

Keypad_I2C kpd( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574 );

void setup(){
  Wire.begin( );
  kpd.begin( makeKeymap(keys) );
  Serial.begin(9600);
  Serial.println( "start" );
}
void loop(){
 
  char key = kpd.getKey();
 
  if (key){
    Serial.println(key);
  }
}


 et j'ai l'erreur "'PCF8574' was not declared in this scope"
sur cette ligne :"Keypad_I2C kpd( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR, PCF8574 );"

Avez-vous une suggestion?
Merci

Jeanbondyork

Bonjour,
le dernier argument (PCF8574) est optionnel et n'est utilisé que pour la rétrocompatibilité avec une version antérieure de la librairie.

A supprimer tout simplement.

hbachetti

Dans Keypad_I2C.h le dernier argument est width.
Il peut être ignoré pour un PCF8574.

Je crains que tu travailles tout de même avec une ancienne version de la librairie.

D'où provient celle que tu utilises ?

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

didiersee


hbachetti


Dans l'exemple de la même librairie l'argument PCF8574 est absent.

Attention de ne pas mélanger.

Bonne continuation
@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

didiersee

Désolé mais je ne comprends pas la solution que vous proposez pour résoudre mon problème. Pourriez-vous détailler svp. Je suis un débutant Arduino à la retraite ;o et oui sur le tard...
Merci

hbachetti

#13
Jul 14, 2018, 12:09 pm Last Edit: Jul 14, 2018, 12:10 pm by hbachetti
Il faut prendre comme exemple les exemples de la bibliothèque correspondante à celle qui a été installée.
Donc l'exemple de mon lien précédent.

Ensuite, modifier le code pour 4 colonnes :

Code: [Select]

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
  {'1','2','3', 'A'},
  {'4','5','6', 'B'},
  {'7','8','9', 'C'},
  {'*','0','#', 'D'}
};
// Digitran keypad, bit numbers of PCF8574 i/o port
byte rowPins[ROWS] = {0, 1, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6, 7}; //connect to the column pinouts of the keypad


Ensuite pour les branchements, il faut repérer les pins correspondant aux lignes et colonnes du clavier.

Exemple:



Bon courage de la part d'un futur retraité (avril 2019)

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

didiersee

Oui merci ça j'avais compris (4x4) mais mon problème d'erreur 'PCF8574' was not declared in this scope je ne vois comment le résoudre? Pcq j'ai supprimé PCF8574 comme vous l'aviez précisé et maintenant voici toutes les erreurs:
 keypad_I2C_test:31: error: no matching function for call to 'Keypad_I2C::Keypad_I2C(char*, byte [4], byte [3], const byte&, const byte&, int)'
 Keypad_I2C kpd( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR );
 D:\Doc_didier\documents_didier\Arduino\keypad_I2C_test\keypad_I2C_test.ino:31:73: note: candidates are: ............
Comment résoudre ce problème?
Merci pour votre aide.

Go Up