Curiosité sur la déclaration de variables...

Bonjour tout le monde,

Je débute en électronique et en programmation et je me pose une petite question sans grande importance mais qui me tracasse !

Cela concerne l'étape de la déclaration des variables.
Cet exemple est parfait pour introduire ma question :

int capteur = 0; // variable identifiant un port analogique 0 de la carte
int LED = 13 ; // variable identifiant le port 13 de la carte
int lum = 0 ; // variable identifiant la valeur de la luminosité du capteur

D’où mon interrogation : comment le programme fait-il pour deviner que quand je dis "int capteur = 0", le 0 fait référence au port analogique 0 de la carte alors que dans ce cas là "int lum = 0" il sait que 0 correspond à une valeur? Pourquoi ne fait-il pas l'inverse par exemple ? (lum en sortie analogique 0 et capteur à la valeur 0 ?)

Après tout, quand je dis "int LED = 13" il pourrait tout aussi bien croire que j'indique une variable LED qui prend la valeur 13, et quand je dis "int lum = 0" rien ne dit que le 0 correspond à une valeur plutôt qu'à un port de ma carte.

Donc comment le programme différencie-t-il un 0 qui correspond à une valeur et un 0 qui indique le numéro d'un port (ou tout autre chiffre entre 0 et 13!) ?

Merci d'avance !

Salut!

Très bonne question que tu te poses là, qui mérite 2-3 explications.

Tout d'abord, on a pour habitude de déclarer une broche (entrée ou sortie) en constante:

const int led = 13;

On ne risque pas, de cette façon, de modifier par erreur cette constante (ce n'est plus une variable :)).

Ensuite, pour que l'IDE sache que ce sont des broches que tu déclares, il faut regarder dans le setup(). Tu dois trouver des déclarations de ce type:

pinMode(13, OUTPUT); 
// ou, comme on a donné un nom à la broche 13
pinMode(led,OUTPUT);

C'est là que toi et l'IDE faites la différence entre une constante utilisée comme référence (ex: const int jours = 365; // jours dans une année) dans le programme ou comme broche d'entrée ou sortie.

Voilà, j'espère avoir été assez clair; au pire n'hésite pas à demander plus d'explications :slight_smile:

sans grande importance

:astonished:
Oulà il y a une grosse confusion entre ce que sont les variables (qui peuvent varié ...) et le nom donné à la variable ... ou j'ai rien compris à la question et je m'en excuse ? :blush:
Les variables servent à stocker des valeurs (binaire) en mémoire, elles possèdent une adresse dans cette mémoire et elle ce différencient par leur type char, int, float, ..., leurs nom importe peux, on va dire que leurs noms sont juste des repères dans ton code une fois compilé elle ne seront pas localisé d'après leurs noms mais d'après leurs adresse.

int trucMachin = 13

pinMode(trucMachin, OUTPUT); // c'est ici que tu définis le mode, c'est bien la valeur 13 qui sera attribuer
digitalWrite(trucMachin, HIGH); //comme ta variable est stockée en mémoire tu peux la réutilisé ...
trucMachin = 12; tu peux même modifier ça valeur en cours de programme ...

Le noms de tes variables n’influent pas sur ton arduino.
Ce sera mieux expliqué que moi.

Entre (), concernant les constantes utilisé pour attribuer la valeur d'une entrée/sortie je lui préfère une petite instruction #define.

Osaka, la question était en fait de savoir comment le logiciel faisait la différence entre un 0 correspondant à une valeur que prend la variable ET un 0 correspondant à un numéro de sortie de patte du pic de la carte Arduino. Schyzophrene a bien répondu en disant que c'est lors de la déclaration des entrées/sorties (pinMode(..)) que l'on donne le complément d'informations qui permet au logiciel de faire la distinction.
Merci à vous deux en tout cas, j'y vois plus clair et je pense revenir trainer dans le coin assez régulièrement maintenant que je me lance là dedans...! :stuck_out_tongue:

Bonne soirée!

T'es le bienvenu, on se fera un plaisir de répondre aux questions que tu te poses :slight_smile:

En réalité, rien de distingue un 13 qui sert à compter d'un qui représente une broche, c'est la fonction et donc le contexte a qui on le passe qui s’attend a recevoir tel ou tel un nombre qui prends un sens dans son contexte.

Ex:

Serial.print(LED,DEC);
Serial.print(led_state, DEC);

Affichera le numéro le la pin sur le port série.

alors que

digitalWrite( 7+6,HIGH);

mettra à haut le port 13, bien qu'il ne soit pas nommé.

D'où l’intérêt de bien nommer ses variables et d'éviter les codes alambiqués :smiley:

D.

[Edit: Dsl, double poste avec schizophrène]