Bonjour,
malheureusement, ce n'est pas un code interprété comme le PHP ou javascript... le nom de variable (la chaîne de caractère) disparaît à la compilation, laissant place à un pointeur (numérique : word ou unsined int). par les pointeurs, tu pourrais t'en sortir, mais je ne maitrise pas du tout l'utilisation des pointeurs. en attendant :
Plus généralement, dans les langages de programmation interprété les noms de variable reste en mémoire lors de l'exécution.
Il est donc possible de faire des opérations sur une chaine de caractéres puis d'utiliser cette même chaine comme nom de variable, fonction, ...
Dans un langage de programmation compilé tout disparait et ce transforme en pointeur, en structure, en registre, etc ...
Il n'est impossible d'appeler une fonction par son nom lors de l'exécution puisse cette fonction n'as plus de nom mais juste un adresse en mémoire.
Méthode simple (et optimisé) :
#define NB_CAPTEURS 5
uint16_t capteur[NB_CAPTEURS];
const uint8_t pins[] = { A0, A1, A2, A3, A4 };
for (uint8_t i = 0; i < NB_CAPTEURS; ++i)
capteur[i] = analogRead(pins[i]) ;
A0 est une constante numérique dans le core arduino ( = 14 chez UNO si je ne me trompe). donc A0 + 1 = A1 = 15, et A0 + 5 = A5 = 19.
C'est effectivement une constante, mais attention !
Depuis arduino 0023 il ne faut surtout plus raisonner en "A0 = D14 sur une UNO", etc ...
Avec les nouvelles cartes arduino (leonardo par exemple) les broches Ax peuvent trés bien se trouver en plein milieu des broches numérique !
(A6 = D4 par exemple sur la leonardo).
Ton code "analogRead(A0 + i)" est donc une source d'erreur à court comme à moyen terme

en remplaçant capteur par ptr_capteur + (2 * i) , je te donne un début de code qu'un expert en pointeurs corrigera je l'espère :
(...)
Aie Aie Aie ... c'est la catastrophe ...
Sur ce coup tu aurais mieux fait de rien dire

Ton code + annotations :
int capteur0, capteur1, capteur2, capteur3, capteur4, capteur5; // déclarer les 6 variables en consécutif!
/* NON rien ne te dit que le compilateur ne vas pas optimiser et réaligner ces variables ! */
/* SAUF si tu lui précise qu'elles sont "volatile", mais la encore rien ne te garanti l'ordre dans lequel seront aligné les variables en mémoire */
pointer ptrCapteur; // je ne sais même pas comment déclarer un pointeur... la honte!
/* déclaration : type * nom; -> exemple int *pointeur; */
for (byte i = 0 ; i < 5 ; i++){
ptrCapteur = *capteur0 + (2 * i); // assigne le pointeur sur la bonne variable
/* Are you fucking serious ? */
/* *capteur0 -> erreur de compilation pure et simple, l'adresse de capteur0 est &capteur0 (& pas *) */
/* (2 * i) n'est pas portable, mieux vaut utiliser (sizeof(int) * i) */
ptrCapteur = analogRead(A0 + i) ; // capteur0 = analogRead(A0);
/* Tu assignes une valeur dans un pointeur, un pointeur étant une adresse tu changes l'adresse mais pas le contenu pointé */
/* *ptrCapteur = analogRead(A0 + i); (ne pas oublier l'accesseur étoile devant le pointeur) */
}
Un code avec pointeurs, correct d'un point de vue syntaxique et sémantique, mais horriblement moche et pas pratique :
#define NB_CAPTEURS 5 // Nombre de capteurs
uint16_t c0, c1, c2, c3, c4; // Variables de destination
const uint16_t *ptr[] = { &c0, &c1, &c2, &c3, &c4 }; // Tableau de pointeur (agencement manuel des adresses)
const uint8_t pins[] = { A0, A1, A2, A3, A4 }; // Tableau de broches (voir remarque plus haut)
for (uint8_t i = 0; i < NB_CAPTEURS; ++i) // Boucle de parcours
*(ptr + i) = analogRead(pins[i]); // équivalent à *(ptr[i]) = analogRead(pins[i]); // Assignation de la valeur
Edit: J'ai été grilled en beauté par
barbudor 