doser13:
En effet ça m'a bien aider, mon erreur était de ne pas avoir mis les [] pour après le nom. D'ailleurs, dans ce cas la on est d'accord que ces [] servent à créer un tableau avec les caractères qui seront définis ensuite ?
quand on initialise un tableau de caractères avec une constante de type chaîne de caractère ( du texte entre guillemets, qu'on appelle cString) le compilateur réserve assez de place pour chacun des caractères (qu'il copie dans la mémoire) plus un caractère en plus à la fin qui sera initialisé avec le caractère nul ('\0'). C'est ce caractère nul qui marque la fin de la chaîne en mémoire. Le nom du tableau est une variable de type pointeur sur caractère et est à l'adresse du premier caractère stocké.
Comme on initialise le tableau avec du contenu, on n'a pas besoin de dire la taille au compilateur, il va automatiquement la choisir pour que tout tienne y compris le caractère nul de fin (et pas plus).
(si on définit avec const char *
ça fait plus ou moins la même chose, on a un pointeur vers une zone mémoire où sont rangés les caractères avec un caractère nul à la fin)
Je sais que par exemple dans le cas du RFID si on appelle un badge badge[5] ca veut dire que la variable badge est définie par 5 valeurs, mais dans le cas d'une chaine de caractère comme ici je ne suis pas sur
le nom n'importe peu, ce qui compte c'est le type de votre variable badge
. quand on écrit unType badge[5];
on réserve en mémoire 5 places de type 'unType
'.
Quand vous faiteschar badge[6]={25, 167, 195, 177, 204, Nom_badge[]};
vous dites au compilateur que badge est un tableau de 6 caractères. les 5 premiers machins que vous mettez dedans ne sont même pas des caractères et le dernier c'est un truc qui ne veut rien dire et n'est pas du type char...
Nom_badge serait du type char* (pointeur sur caractère)
Nom_badge[] ça ne veut rien dire
Nom_badge[0] ça serait un caractère, le premier du tableau (le 'C' de "Charles")
Ce que vous voulez faire ne se fait pas avec un tableau mais avec une structure, mot clé struct. ça permet de créer un type qui va grouper ensemble des données de différents types. Ici vous pourriez avoir
struct t_badge {
const byte identifiant[5];
const char * utilisateur;
};
avec ça vous créez un nouveau type t_badge
qui combine un tableau de 4 octets et un pointeur vers des caractères.
ensuite vous pouvez initialiser une variable de type t_badge comme cela
t_badge unBadge = {
{25, 167, 195, 177, 204}, // ça remplit le tableau 'identifiant[5]'
"Charles" // ça initialise le pointeur 'utilisateur' vers cette chaîne
};
On s'en servirait comme cela dans un petit code:
struct t_badge {
const byte identifiant[5];
const char * utilisateur;
};
t_badge unBadge = {
{25, 167, 195, 177, 204},
"Charles"
};
void setup()
{
Serial.begin(115200);
Serial.print("Badge de ");
Serial.println(unBadge.utilisateur);
Serial.print("N° de série: ");
for (byte i = 0; i < 5; i++) {
Serial.print(unBadge.identifiant[i]);
Serial.print(".");
}
}
void loop() {}
le moniteur série (à 115200 bauds) affichera
[color=purple]
Badge de Charles
N° de série: 25.167.195.177.204.
[/color]
==> prenez un peu de temps pour lire un tuto sur le langage C. vous avez des lacunes qui vous rendent la vie plus difficile que nécessaire