Erreur :no matching function for call to

bonjour à tous .
depuis plus de deux semaines j'essaie sans succès de compiler un fichier pour piloter un clavier en I2C. si j'ai bien compris l'erreur , le compilateur ne trouve pas la librairie associée ( Keypad_I2C) pourtant présente dans le dossier : arduino/librairies/keypad_I2c .
j'ai essayé plusieurs IDE de la version 1.8.10 à la dernière .
j'ai cherché sur d'autres fil de discussion , notamment celui-ci . dont est issu le code du croquis et l'origine de la librairie . je ne sais pas comment m'en dépêtrer, je vois trouve pas le nœud du problème .....et là le suis à court d'idées .

pour info : je veux utiliser un clavier ainsi qu'un lcd , tous deux en I2C pour libérer des broches sur uno .
Dans l'attente , merci à tous .

Salut.
Message déplacé dans la partie principale du forum.

Tout dépend du message d'erreur du compilateur, que tu ferais mieux de donner.

désolé .

Arduino : 1.8.10 (Windows 10), Carte : "Arduino Uno"

I2CLCD_keypad:34:79: error: no matching function for call to 'Keypad_I2C::Keypad_I2C(char*, byte [4], byte [4], const byte&, const byte&, int)'

 Keypad_I2C customKeypad(makeKeymap(hexaKeys),rowPins,colPins,ROWS,COLS,I2CADDR);

                                                                               ^

In file included from C:\Program Files (x86)\Arduino\examples\I2CLCD_keypad\I2CLCD_keypad.ino:16:0:

C:\Program Files (x86)\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:29:9: note: candidate: Keypad_I2C::Keypad_I2C(int, int)

         Keypad_I2C(int i2c_addr, int int_pin);

         ^~~~~~~~~~

C:\Program Files (x86)\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:29:9: note:   candidate expects 2 arguments, 6 provided

C:\Program Files (x86)\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note: candidate: constexpr Keypad_I2C::Keypad_I2C(const Keypad_I2C&)

 class Keypad_I2C

       ^~~~~~~~~~

C:\Program Files (x86)\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note:   candidate expects 1 argument, 6 provided

C:\Program Files (x86)\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note: candidate: constexpr Keypad_I2C::Keypad_I2C(Keypad_I2C&&)

C:\Program Files (x86)\Arduino\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note:   candidate expects 1 argument, 6 provided

C:\Program Files (x86)\Arduino\examples\I2CLCD_keypad\I2CLCD_keypad.ino: In function 'void setup()':

I2CLCD_keypad:37:1: error: 'wire' was not declared in this scope

 wire.begin( ); // GDY200622

 ^~~~

C:\Program Files (x86)\Arduino\examples\I2CLCD_keypad\I2CLCD_keypad.ino:37:1: note: suggested alternative: 'Wire'

 wire.begin( ); // GDY200622

 ^~~~

 Wire

I2CLCD_keypad:38:1: error: 'lcd' was not declared in this scope

 lcd.init( ); // GDY120705

 ^~~

C:\Program Files (x86)\Arduino\examples\I2CLCD_keypad\I2CLCD_keypad.ino: In function 'void loop()':

I2CLCD_keypad:48:8: error: 'custoKey' was not declared in this scope

  while(custoKey==NO_KEY)customKey=customKeypad.getKey( );

        ^~~~~~~~

C:\Program Files (x86)\Arduino\examples\I2CLCD_keypad\I2CLCD_keypad.ino:48:8: note: suggested alternative: 'customKey'

  while(custoKey==NO_KEY)customKey=customKeypad.getKey( );

        ^~~~~~~~

        customKey

I2CLCD_keypad:49:2: error: 'lcd' was not declared in this scope

  lcd.clear( );

  ^~~

Plusieurs bibliothèque trouvées pour "Keypad_I2C.h"
Utilisé : C:\Program
Plusieurs bibliothèque trouvées pour "Keypad.h"
Utilisé : C:\Program
Plusieurs bibliothèque trouvées pour "Wire.h"
Utilisé : C:\Users\paika\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\Wire
exit status 1
no matching function for call to 'Keypad_I2C::Keypad_I2C(char*, byte [4], byte [4], const byte&, const byte&, int)'

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Entre autres, wire s'écrit Wire, avec un W majuscule.

Pour le reste il serait bien aussi de dire où cette librairie a été téléchargée, et éventuellement publier ton code.

voici le code

/* @file CustomKeypad.pde
|| @version 1,0
|| @author Alexandre Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | Illustre la modification de la taille du clavier et des valeurs de clé.
|| #
 Utilisation avec I2C i/o G. D. (Joe) Young 28/12 février
*/
#include <Keypad_I2C.h>
#include <Keypad.h> // GDY120705
#include <Wire.h>
#define I2CADDR 0x20

const byte ROWS = 4; //quatre lignes
const byte COLS = 4; //quatre colonnes
//définir les cymbales sur les boutons des claviers
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {3, 2, 1, 0}; //se connecter aux brochages de ligne du clavier
byte colPins[COLS] = {7, 6, 5, 4}; //se connecter aux brochages de colonne du clavier

//initialiser une instance de la classe NewKeypad
Keypad_I2C customKeypad(makeKeymap(hexaKeys),rowPins,colPins,ROWS,COLS,I2CADDR); 

void setup (){
wire.begin( ); // GDY200622
lcd.init( ); // GDY120705
 lcd.backlight( );
 customKeypad.begin( );
 lcd.clear( );
 lcd.setCursor(0,0);
 
}
  
void loop (){
  char customKey = customKeypad. getKey();
 while(custoKey==NO_KEY)customKey=customKeypad.getKey( );
 lcd.clear( );
 lcd.setCursor(0,0);
 lcd.print(customKey);
 delay(100); 
  if (customKey != NO_KEY){
 Serial. println(customKey);
  }
}

et la librairie :
Keypad_I2C.zip (9,2 Ko)

pour info : ce code brut est ma " trame de départ " pour utiliser le clavier en I2C et ne sera qu'une partie de mon code global qui constituera mon projet . je ne sais pas si ma méthode est correcte mais j'essaie de comprendre chaque partie de code correspondant au capteur/composant/actionneur que je souhaite utiliser ( en l'occurrence un clavier/membrane en I2C ) puis j'essaie de les assembler .

Dans le fichier readme de ta librairie, je vois :

F4GOJ Christophe f4goj@free.fr September 2014

Cette librairie ne propose même pas un exemple simple. A moins de savoir vraiment ce que tu fais, c'est ingérable pour un débutant.

Et ton code est probablement inspiré d'un exemple de :

ou

Je dirais deux choses :

  • il vaut mieux utiliser les librairies les plus connues, en particulier celles proposées par l'IDE (voir gestionnaire de bibliothèques)
  • on ne compile pas les exemples d'une librairie quand on a installé une autre librairie, surtout si elle porte le même nom

-> librairie F4GOJ à virer, et utiliser celle de Rob Tillaart, ou Joe Young

du coup mon bout de code n'est pas compatible avec la librairie de robtillaart ?

Non, puisque la classe écrite par Rob s'appelle I2CKeyPad.
Par contre celle de Joe Young s'appelle bien Keypad_I2C.
Au moins, eux, ils ont l’intelligence de nommer leurs classes de manière différente.

donc si j'ai bien compris , dans mon code il me faut renommer:
#include <Keypad_I2C.h> par #include <I2CKeyPad.h>
Keypad_I2C customKeypad(makeKeymap(hexaKeys),rowPins,colPins,ROWS,COLS,I2CADDR); par
I2CKeyPad customKeypad(makeKeymap(hexaKeys),rowPins,colPins,ROWS,COLS,I2CADDR);

pour inclure la bonne librairie et que l'instance fasse appel à cette dernière

Si tu choisis I2CKeyPad regarde les exemples de cette librairie.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.