Question sur la déclaration des variables (Résolu)

Tout sur les cartes et la programmation des modules ARDUINO

Question sur la déclaration des variables (Résolu)

Messagede FiX » Dim 22 Mar 2015 18:32

Y'a un tuc que je ne pige pas dans la déclaration des variables.

Dans la déclaration, on nomme ses variables, on attribue éventuellement une broche et on peut également attribuer une valeur.
Mais je ne vois pas du tout comment la différence est faite entre une attribution de broche ou de valeur, c'est exactement le même code. gratgrat

Par exemple:

Int potPin = A0; // on raccorde le potard à la broche A0
int ledPin = 13; // on raccorde une led à la broche 13
Int ledValue = 0; // on déclare la variable ledValue et elle prendra la valeur 0.


Pour potPin = A0, là d'accord' y'a pas d'ambiguité, A0 est une entrée de l'arduino.
Mais pour ledPin=13 et ledValue=0, là je ne pige pas comment le programme comprend que dans le premier cas il s'agit de la broche 13 de l'arduino et dans le deuxième cas il s'agit de donner une valeur à une variable.
A ce moment là, ça pourrait très bien vouloir dire que l'on donne la valeur 13 à la variable ledPin ou que l'on branche une led sur la broche 0 ?

(C'est quand même pas parce qu'il y a le mot Pin dans ledPin?? gratgrat )
Dernière édition par FiX le Lun 23 Mar 2015 02:03, édité 1 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Question sur la déclaration des variables

Messagede dreambox » Dim 22 Mar 2015 19:34

Bonjour Fix

Dans les trois cas, tu as juste déclaré des variables en affectant des valeurs à ses variables

PotPin, ledPin et ledValue sont les variables
A0, 13 et 0 sont les valeurs

après tout dépends des instructions que tu utilise .

analogRead (PotPin) ou analogRead (A0) te donneras le même résultat
la lecture de la valeur compris entre 0 et 1023 sur le potentiomètre branché à la broche (Pin) A0
tu placeras ce résultat dans une autre variable ou comme condition dans une instruction conditionnelle

Pour la led

il faut déclarer la broche (Pin) en sortie dans le vois setup () exemple: pinMode (ledPin, OUTPUT) ;
si tu n'utilise pas la variable tu peux aussi écrire exemple: pinMode (13, OUTPUT) ;

Pour éteindre la led correspondante se sera dans le vois loop ()
digitalWrite (ledPin, ledValue) ;
qui correspond aussi à
digitalWrite (13, 0) ;

tu changeras la variable ledValue en affectant la valeur 1 pour allumer la led

Cordialement DREAMBOX
Avatar de l’utilisateur
dreambox
 
Messages: 303
Inscription: 23/11/13
Localisation: F62950 Noyelles-Godault

Re: Question sur la déclaration des variables

Messagede JacquesZ » Lun 23 Mar 2015 00:19

dreambox a écrit:
Dans les trois cas, tu as juste déclaré des variables en affectant des valeurs à ses variables

PotPin, ledPin et ledValue sont les variables
A0, 13 et 0 sont les valeurs

Comme on dit au Chiffres et aux Lettres: pas mieux! lunettesnoires

Je pense que le problème vient de la différence avec SIOC qui confond variable et broche.

------------------------ Mode TUTO ON --------------------------------------------
Dans tout code Arduino, même le plus simple, il y a au moins deux sections, Setup() et loop().
Par exemple, dans l'éditeur de l'environnement de développement Arduino, avec la commande Fichier/exemple/01-Basics/Bare minimum) on ouvre le fichier suivant:
Code: Tout sélectionner
void setup(){
}

void loop(){
}

avec des accolades ouvrantes { et fermantes } pour chacune des sections.

1-La section Setup()
Tout ce qui se trouve à l'intérieur de la section Setup() est exécuté une seule fois à l'initialisation de l'Arduino (en gros à la mise sous tension, au branchement sur le port USB ou après un appui sur le bouton Reset de la carte)

C'est dans cette section qu'on va indiquer à Arduino comment gérer les broches (pins):
    - comme une entrée (avec l'instruction pinMode(XXX, INPUT) qui indique que la broche XXX sera configurée en entrée);
    - comme une sortie (avec l'instruction pinMode(XXX, OUTPUT)qui indique que la broche XXX sera configurée en sortie);
    - comme une entrée utilisant la résistance interne "Pull-Up" de 10 Kohms de chaque port (avec l'instruction pinMode(XXX,INPUT_PULLUP) OU BIEN en faisant suivre l'instruction pinMode(XXX,INPUT) par l'instruction digitalWrite(XXX,HIGH))
On comprend tout l'intérêt d'une ou plusieurs boucles "for" pour configurer les 70 broches d'une Arduino!

Maintenant rien n'empêche AVANT la section setup(), d'affecter le numéro de la broche à une variable, à qui on donne un nom intelligent du genre "ledPin" et à qui on affecte une valeur que l'on pourra ainsi changer plus facilement si besoin plutôt que plonger dans le code. Par exemple instruction du genre
Code: Tout sélectionner
int ledPin=13
, déclare une variable de type "entier" (int) qu'on nomme "ledPin" et lui affecte en même temps la valeur 13.

Mais pour l'Arduino et son compilateur la variable pourrait aussi bien s'appeler TOTO ça marcherait pareil....(on peut aussi utiliser #define qui ne prendra aucune place dans le code compilé alors qu'une variable si...)

Dans la section Setup() on trouverait alors pour la broche 13 configurée en sortie:
pinMode(ledPin,OUTPUT)
ou
pinMode(TOTO,OUTPUT)


Dans la section Setup(), on va donc en profiter pour initialiser des variables en leur affectant leur valeurs d'origine genre quantité de carburant, tension batterie, état du train....
On peut également changer l'état des sorties au démarrage, par exemple allumer ou éteindre telle Led de manière à correspondre à un état précis avec l'instruction
Code: Tout sélectionner
digitalWrite(XXX,HIGH)
ou
Code: Tout sélectionner
digitalWrite(XXX,LOW)
. La broche devra bien entendu avoir été définie au préalable comme une sortie avec l'instruction pinMode!

On va aussi configurer la vitesse (en bits/sec) du port série (USB) (avec l'instruction Serial.begin(ZZZZ), ZZZZ variant habituellement entre 9600 et 115200), etc....

La section loop()
Comme son nom l'indique, cette section est répétée en boucle sans fin, jusqu'à ce qu'on débranche la carte ou qu'on appuie sur le bouton Reset.
On a donc intérêt à ne pas trop remplir cette section d'instructions, mais plutôt à faire des appels à des fonctions externes à la section loop(). Une fois la fonction externe exécutée, le code retourne automatiquement à l'instruction suivante dans la section loop(). La fonction externe peut elle même faire appel à d'autres fonctions externes, sur le principe des poupées russes!

------------------------------------ MODE TUTO OFF ---------------------------------
En rédigeant ces mots, je me rends compte qu'un extrait commenté d'un des codes de Link2Fs permettrait peut être d'en comprendre la structure, car il est vrai que je me suis un peu arraché les cheveux au début. On va finir mon déménagement et je m'y colle si ça peut intéresser quelqu'un

Amicalement
Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Question sur la déclaration des variables

Messagede FiX » Lun 23 Mar 2015 01:54

Ok, merci c'est rès clair.
Je n'avais pas réalisé que la déclaration des vriables avant le setup n'avait pas vraiment d'importance, tout pourrait se jpuer dans le setup.
Donc on donne une valeur à une variable dans la déclaration et c'est dans le setup que l'on va déterminer si cette valeur était un numéro de broche ou juste une valeur.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Question sur la déclaration des variables

Messagede JacquesZ » Lun 23 Mar 2015 11:22

FiX a écrit:Donc on donne une valeur à une variable dans la déclaration et c'est dans le setup que l'on va déterminer si cette valeur était un numéro de broche ou juste une valeur.

C'est bien ça.
Le fait d'affecter à des variables des entiers correspondant aux numéros de broche sert uniquement pour améliorer la flexibilité (lisibilité, maintenance) du code.

Ainsi il vaut mieux avant la section Setup() avoir un stock de variables correspondant aux broches à affecter, double avantage, on leur donne un nom signifiant (genre LedPin, buttonPin, servoPin) et si on change la broche affectée, pas besoin de plonger dans le code, puisque le code (y compris la section setup()) fera référence à la variable et non pas à une broche particulière.

Ceci dit en termes de maintenance de code pour les scripts fournis Link2Fs, je trouve perso que c'est pas encore ça.
A mon avis une réécriture partielle du début avec un fichier "dédié" à l'affectation des broches (n°, type) permettra une maintenance plus facile. On inclut ensuite le dit fichier dans le code principal avec une instruction #include et le compilateur fait le boulot en remplaçant les bonnes valeurs aux bons endroits. Ca devrait en plus à terme économiser des octets de mémoire, quoiqu'avec les MEGA, on a pas loin de 16ko pour les programmes et les variables, ce qui semble amplement suffisant.

L'idée est d'avoir à terme un sketch "pour les nuls" où on aura qu'à renseigner le fichier externe avec les numéros de broche pour que ça fonctionne.

Fix, content d'avoir éclairé ta lanterne avec Philippe!

Jacques
Ma chaîne YouTube Tutos sur l’A320 par un Pilote de Ligne: https://youtube.com/channel/UCljftuoKBcgeR-WBgYJpuoA
Avatar de l’utilisateur
JacquesZ
 
Messages: 2848
Inscription: 24/11/10

Re: Question sur la déclaration des variables (Résolu)

Messagede PARALAILE » Lun 23 Mar 2015 12:07

JacquesZ a écrit: On va finir mon déménagement et je m'y colle si ça peut intéresser quelqu'un.

Oui, Oui!
Merci jacques!
Bon déménagement!
Dominique --> DC-3
Avatar de l’utilisateur
PARALAILE
 
Messages: 111
Inscription: 11/11/12


Retourner vers Interface & logiciel ARDUINO





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités