dois-je comprendre que je ne peut pas exploiter deux mesures analogique simultanément?
Ce n'est pas ce que j'ai écrit. De toute façon en programmation tu ne peux pas faire des actions simultanées, tu ne peux que mettre en série sauf avec plusieurs cœurs ce qui revient à utiliser plusieurs microcontrôleurs en parallèle.
Il n'y a qu'en électronique que l'on peut mener des actions en parallèle. Une zone d'électronique pure peut être la liaison série, I2C, etc ou simplement les étages d'entrée/sortie du microcontrôleur.
J'ai écrit qu'il faut jeter la première mesure.
soit :
int a1 = analogRead(A1); // On ne sait pas si le CAD n'était pas déjà en train de faire une mesure
// mesure non conservée.
a1 = analogRead(A1) ; // mesure conservée
int a2 = analogRead(A2); // changement d'entrée --> mesure non conservée
a2 = analogRead(A2); // mesure conservée
Le lien de dbrion06 est une reprise de la datasheet par Mike Gamon.
Il est plus "agréable" à lire mais pas forcément aussi complet car par exemple le micro de la Uno est différent de celui de la Mega. Les différences sont minimes mais un nom de registre peut être différent et ce genre d'erreur n'est pas simple à détecter.
Tu peux apprendre avec Mike Gamon et contrôler avec la datasheet qui reste le juge de paix.
Les "registres" sont des zones mémoire particulières avec des adresses fixes qui permettent au programme de converser avec les zones d'électronique pure du micro.
Pour les micro Atmel architecture avr comme sur la UNO les registres sont sur 8 bits mais avec l'architecture ARM ( cartes haut de gamme arduino) les registres sont sur 32 bits
Pour te donner une idée du gain en rapidité écrire un 1 ou un 0 sur une sortie prend 8 cycles horloges avec les registres et plus de 60 cycles avec les fonctions arduino.
Les E/S à la mode arduino sont numérotés de 0 à n, mais c'est la mode arduino.
Les concepteurs de micro font différemment. Les E/S sont groupées dans des PORT qui pour la UNO sont 8bits
Si on veut gérer les E/S directement il faut bien entendu utiliser la dénomination du concepteur.
Pour les entrées/sorties il y a 3 registres
Les E/S sont groupées dans ce qu'on appelle des PORT, les PORTS sont dénommés avec des lettres (A, B, C,...)
x = la lettre du port
DDRx : régle le sens Entrée ou sortie. Le bit 0 correspond à l'E/S n:0, le bit 1 à l'E/S n:1 , etc...)
DDRD = 0b00110000;
aura pour effet de mettre les bits 4 et 5 à "1" et donc de placer les E/S correspondantes en sortie. Tous les autres bits étant à "0" les E/S correspondantes seront placées en entrée.
PORTx : sélectionne la sortie (bit 0 correspond à la sortie n:0, bit 1 ...)
PORTD = 0b00100000;
aura pour effet de mettre le bit 5 à "1" et donc d'écrire un état haut (5V) dans la sortie correspondante, tous les autres bits étant à "0" les sorties correspondantes seront placé à l'état bas (0V).
PINx : permet de lire une entrée, le principe est le même sauf que là on n'écrit pas mais on lit.
Et pour apprendre à manipuler les bits d'un registre le mot clé est "bitwise"
J'ai volontairement exploré un autre domaine que celui de la mesure analogique, et j'insiste, ce n'est pas une obligation de procéder avec les registres.
Il faut déjà faire la preuve que la vitesse d’exécution de la fonction analogRead() est perturbante.
et donc de voir si une meilleures organisation du programme ne résous pas le problème.
Points aussi sur lesquels j'insiste :
- la datasheet te permettra de découvrir la totalité des possibilités du convertisseur analogique digital.
- Les serialPrint() sont-il nécessaires ?
N'y a-t-il pas une autre façon de procéder/organiser qui serait plus astucieuse ?
Comme c'est un projet d'étude je ne donnerais que des pistes, j'ai un profond respect pour l’honnêteté de la note.