Go Down

Topic: [Résolu] Problème lors de l'appel d'une fonction dans la compilation (Read 882 times) previous topic - next topic

schizophrene

Oct 10, 2011, 07:00 pm Last Edit: Oct 12, 2011, 08:33 pm by schizophrene Reason: 1
Salut à tous!

Alors tout d'abord, je remercie B@tto, il saura pourquoi :)


Mon soucis du jour... :

J'utilise un TLC5940 pour mon projet (disposition en 3*5, mais pas en matrice), et m'est venue l'idée de créer un fonction permettant de lire des lettres (même si ce n'est pas le but premier).

J'ai donc créé le prototype de ma fonction dans un fichier .h:
Code: [Select]
void lireLettre(byte Hlettre, int HPLEIN );
(où 'Hlettre' est la lettre à lire, et 'HPLEIN' la valeur PWM pour le TLC5940)

et l'implémentation de cette fonction dans un fichier .cpp:
Code: [Select]
void lireLettre(byte Hlettre[], int HPLEIN)
{
 int Hi;
 for (Hi = 0; Hi < 15; Hi++)
 {
   if (Hlettre[Hi] == 1)
   {
     Tlc.set(Hi,HPLEIN);
     Tlc.update();
   }
 }
}


La définition d'une lettre est de ce type:
Code: [Select]
extern byte A[15] = {1,1,1,1,1,1,0,1,0,0,1,1,1,1,1};
(où 1 = led allumée, 0 = led éteinte)


Les instructions de la fonction fonctionnent parfaitement quand je ne mets que ça dans un sketch, pas de problème de ce côté-ci.

Par contre, en prototypant ma fonction et les tableaux 'lettre', en appelant dans mon code de cette façon: "lireLettre(A,PLEIN);", j'obtiens cette erreur:
Code: [Select]
Projet_X_1_0.cpp: In function 'void loop()':
Projet_X_1_0:55: error: invalid conversion from 'byte*' to 'byte'
Projet_X_1_0:55: error: initializing argument 1 of 'void lireLettre(byte, int)'


Si j'écris l'appel de fonction comme-ci: "lireLettre(*A,PLEIN);", j'obtiens ça:
Code: [Select]
Projet_X_1_0.cpp.o: In function `loop':
C:\Users\SCHIZO~1\AppData\Local\Temp\build716184740382005681.tmp/Projet_X_1_0.cpp:59: undefined reference to `lireLettre(unsigned char, int)'



Quelqu'un à une idée à me proposer pour remédier à ce problème? Merci d'avance.


skywodd

Bonjour,

Il y a une petite erreur dans le prototype c'est tout.

Code: [Select]
void lireLettre(byte *Hlettre, int HPLEIN );
faut pas oublier l'étoile.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

schizophrene

Arf, pas pensé à tester ça! Je le ferai tout à l'heure ou demain :)

Merci skywodd!

schizophrene

Bon, en fait dans mon prototypage, j'avais oublié les crochets pour la variable 'Hlettre' ...
Mais ta solution fonctionne aussi skywodd :)

Par contre, dans les 2 cas, l'affichage de mes lettres ne se fait pas correctement! Pas pour toutes, mais toujours les mêmes...
Et ce n'est que quand je fais plusieurs appels de la fonction, pour afficher un mot.
Sinon, avec un seul appel de la fonction dans le sketch, la lettre s'affiche correctement.

taddot

peut-être un soucis de rafraichissement (affiche un caractère "vide" entre chaque lettre, pour vérifier)
pas taper... sauf application de l'article 35 ...

Go Up