Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Big-tuto] Arduino : électronique et programmation

Des suggestions ? Des commentaires ? C'est ici !

8 mars 2013 à 16:41:55

Ça dépendra évidemment de la vitesse du validateur. Evidemment, s'il met trop de temps à corriger le deuxième chapitre, il choisira de publier le premier dans un premier temps.

  • Partager sur Facebook
  • Partager sur Twitter
Moi, c'est tcitounet. «Peut mieux faire». Rendez-vous sur Zeste de Savoir ♥
13 mars 2013 à 16:40:59

Bonjour! Tout d'abord, je tiens à vous remercier pour ce super tuto! Ensuite, j'ai quelques remarques concernant la partie programmation (je n'y connais rien en Arduino, mais je fais du C/C++):

<li>Quand vous parlez de la division, vous montrez ce code comme exemple:
int x = 0;     
int y = 10;
double z = 0;
 
x = 12 / 3;   // x vaut maintenant 12 / 3 = 4
 
z = x / y;    // on a donc z = 4 / 10 = 0.4

Or cela est faux, car 4/10=0, ou bien 12/5=2. Comme en C : http://arduino.cc/fr/Main/Arithmetique

<li>Ensuite, à propos des fonctions:


Les fonctions vides

On vient de voir qu'une fonction pouvait accepter des paramètres. Mais ce n'est pas obligatoire. Une fonction qui n'accepte pas de paramètres est une fonction vide.

Or je pense qu'une fonction vide (void) est une fonction qui ne renvoie pas de valeur, mais qui peut avoir des paramètres, non?

Voilà, j'espère ne pas avoir dit de bêtises :)

PS: au fait, on peut faire des tableaux dont la taille dépend d'une variable, comme en C++? PPS: et vous devriez remettre un lien vers le tuto dans le 1er post. PPPS: 20min pour mettre ce post en page... éditeur de m****

  • Partager sur Facebook
  • Partager sur Twitter
25 mars 2013 à 17:22:53

Bravo les gars,

Je viens de terminer ce superbe TUTO sur l'arduino, et je suis enchanté.

J'ai un DUT en GEII (y a 12 ans déjà), et je me remets à l'electronique.

J'ai tout lu / vu en trois semaines, et à n'en pas douter vous avez fait un bon boulot. C'est clair,

c'est vraiment un très bon début pour qui comme moi partait d'un niveau zero sur la BETE.

Je vais suivre l'actu de ce TUTO, et faire mes remarques si nécessaire. A ce sade y a quelques trucs

mais c pas méchant.

  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2013 à 17:37:15

Voila en résumé, mes commentaires divisées en quatre parties: 

== Pédagogie == Corrections et Améliorations simples

== Codage ==  Corrections et Améliorations simples

== Correction linguistique == les choses à changer en MAJUSCULES

== Erreurs == 

Ce TUTO je le rappelle est un excellent TUTO. C'est pour apporter ma

contribution. Il est important de dire que je n'ai pas de carte Arduino.

J'ai donc rien pu tester, je peux largement me tromper aussi des fois!

Autre précision: les numéros de page correspondent à la version pdf du TUTO

(2 dec 2012)

BONNE LECTURE !!!!!

== Pédagogie == Corrections et Améliorations simples

p 74: Définition d'une fonction 'vide' et prototype

Une fonction est une entité pouvant recevoir des arguments en Entrée et

retourner une valeur en Sortie. 

Si elle ne recoit rien en Entree, alors on mets rien et on ecrit en parenthèses vides

Si elle ne retourne rien, on utilise le type void pour le valider. C tt.

p 81: Transmission d'arguments à une fonction (par valeur / par adresse)

A cause des tableaux, j'introduirai la notion de transmission par adresse

en faisant un lien vers le tuto de mateo sur sdz. C'est la notion de

pointeur, Il l'explique bien.

p 146: Dans l'organigramme, 'ABCD' ne représentent pas directement pour moi 

les segments de l'afficheur mais des bits. Je changerai par exemple 

'Allumer le segment D' par 'Mettre le bit D à 1' 

p 153: J'expliquerai pourquoi il n'y a pas besoin de mettre une résistance de polar

au niveau du collecteur et/ou de l'emetteur du transistor.

Rapidement, un transistor ca se polarise et en lisant la doc, le constructeur

fournit la valeur MAX du courant que peut supporter le transistor dans son

collecteur (pour l'emetteur c'est bien évidemment la meme valeur). Il faut

donc comme une led limiter sa valeur par une résistance. Or ici, grace à

l'afficheur y en a pas besoin. Le transistor est polarisé par son emetteur

par la résistance d'entree de l'afficheur + une resistance équivalente

(330 à 330/n). Si on affiche le chiffre 1, y a deux segments allumés, donc

le courant circule dans 2 branches de l'afficheur, n=2 deux R en // égal à R/2.

La résistance de polar dans ce cas: Rpolar = Rentree + 330/2.

Sinon on a vite fait de griller un transistor. C'est très fragile.

p 181: Je suis septique sur le choix du mot INVERSE pour parler en fait du

'complement à un'. C'est pas très courant je pense. 

p 189: L'organigramme présente un montage à cathode commune. Le programme 

qui suit fait le contraire selon moi. Du coup pour moi toutes les leds sont 

à touner et changer la masse par +Vcc.

p 193: Dans la présentation d'une liaison série, je rajouterai en plus que

c'est une communication point à point.

p 194: Toutes les tables de caractères sur 8 bits ont leur 128 premiers

états en commun. C'est ce qu'on appelle aussi l'ASCII US sur 7 bits. 

p 246: Présentation des grandeurs analogiques, changer BOUT par 'motif'

La période d'un signal et en fait un 'motif' de ce signal qui se répète etc..

Aussi, j'en profiterai pour introduire la notion de grandeur analogique constante (DC).

C'est en fait un signal de fréquence égale à OHz. Le hertz donnant le nombre

de répéttions d'un signal périodique en une seconde.

p 255: Différenciation des broches Entrees Analogiques versus Numeriques

Je pense ici qu'on peut conseiller par exemple dans le choix des noms de

variables de faire: analogPin1, digitalPin1 etc ..

p 259: Je suis passé à coté de la 'Solution 2', je ne l'a comprends pas !!

p 284: Comportement d'un condensateur en régime continu (DC)

C'est une notion très importante en électronique, et meme pour la suite du

cours quand vous parlez de la PWM.

Mes remarques sur le sujet:

a)couple RC

Un condo se charge par une résistance série Rs et se décharge dans une

résistance parallèle Rp qui n'est pas forcément équivalente. Et justement,

dans un pull-up, la Rp vaut 0 car c'est la résistance équivalente du BP qui

est quasi nul. Il se décharge donc dans un court-circuit qui ne pose pas pb

car sa capa est très faible 10nf.

b)En régime continu, un condo s'oppose à l'établissement (en mode charge) ou 

à l'annulation (en mode décharge) brutale/rapide de la tension. Pour une

self c'est la même chose mais pour le courant. C'est un raisonnement important

pour de l'etude de circuit.

c)Comme vous donnez la fréquence de 490Hz pour le PWM, calcul de T = 2.04 ms.

C'est utile justement pour le calcul du couple RC (tau),puis des bonnes valeurs R et C.

En charge:

 à tau: 63%

 à 2 tau: 87% de la tension 

 à 3 tau: 95%

 à 5 tau: 99%

En décharge:

 à tau: 37%

 à 2 tau: 13% de la tension

 à 3 tau: 5

 à 5 tau: 1%

p 299: Vous mentionnez la possibilite de relier le LCD par une liaison série

au travers d'un CI 'magique'. Je suis preneur d'un exemple mais juste le nom

pour info.

== Codage ==  Corrections et Améliorations simples

p 69: Boucle 'while' pour un compteur

int compteur = 0;

while(compteur++ < 5)

{

//code

}

On peut aussi en profiter pour faire un renvoi sur la précédence des

opérateurs. En C, on l'utilise énormément pour simplifier le code.

p 274: Je citerai la possibilté de régler le pourcentage de la PWM par

l'opérateur cast de facon simple comme ceci:

(int) (42*2.55)// les parenthèses sont obligatoires

p 290: Pour l'animation YouTube, il est bcp plus logique de régler

l'ordre de défilement dans le tableau de LED[] et de faire une entree

en mode croissant de la luminosite ensuite.

Pour un Sens des aiguilles d'une montre (pas de '51'):

const int LED[6] = {9, 10, 11, 3, 5, 6};

const char pwm[6] = {255, 204, 153, 102, 51, 0};

Je me suis pris la tete à comprendre les anciennes valeurs de pwm[] !

== Correction linguistique == les choses à changer en MAJUSCULES

p 147: ALLUMER LE SEGMENT D par 'mettre à 1 le 4e bit'

p 310: AVANT DE FAIRE APPEL par 'au moment de l'appel'

p 312: toujours SUR LE MEME PIXEL par 'toujours à la meme position'

== Erreurs == 

p 77: Division Entière

ex:

int resultat, x, y ;

resultat = x/y; 

si x=5 et y=10, alors resultat = 0 (et non pas 0.5)

p 311: Je ne comprends pas pourquoi vu que vous utilisez la technique par

interruption. Vous ne mettez pas ces valeurs car elles sont imposées si j'ai

bien compris.

const boutonGauche = 2;

const boutonDroite = 3; 

p 321: les BP sont actifs à l'etat BAS

donc dans la fonction updateEcran() selon moi c'est l'inverse dans les conditions

if (etatGauche) sprintf(messageHaut,"Bouton G : OFF") etc..

Merci de m'avoir lu.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mars 2013 à 20:59:00

Salut,

Je n'ai pas reçu de notifications, du coup j'ai bien fais de regarder le forum sinon j'allais rater un superbe retour. Merci de ton aide le_breton ! Nous essayerons de corriger ça avant la validation du tuto (ce qui est largement jouable (merci à tcit pour l'info ;) )).

J'essayerai de te répondre ensuite pour revoir les points que tu as abordé. Mais ce ne sera pas pour tout de suite, je suis très pris en ce moment, et Eskimon également, donc on avance à petit pas.

D'ailleurs, on était mitigé (moi je suis plutôt pour et Eskimon plutôt contre) sur une idée de réorganiser le tutoriel en faisant comme si le lecteur n'avait aucune connaissance en programmation. Ca demande du travail mais pas énormément finalement. Après, ce qu'il nous manque c'est savoir si les lecteurs seront plutôt pour cette approche de "zéro complet" ou bien celle actuelle où il faut bien s'accrocher au début pour programmer et comprendre ce que l'on fait. Si vous avez quelques retours à nous donner sur la question, ce sera avec grand plaisir que nous les accepterons. :)

Merci aussi à Turambar pour ton retour, il semblerait effectivement qu'il y ait quelques coquilles et une confusion avec le mot void.

Je vous tiendrais informé (ou moi, ou Eskimon) del'avancée des corrections et aussi de la futur validation des chapitres qui sont prêts et ceux qui sont commencés.

A bientôt et merci à tous ! :)

olyte

  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2013 à 13:15:52

Arf de même sans notifications j'ai raté vos retour :(

Merci à tous, ca fait toujours plaisir d'entendre que le travail fait est pas si mal et d'avoir des idées/corrections ^^
(Surtout que des fois on a le vocabulaire mais on y pense pas sur le moment quand on écrit, comme le coup des segments A,B,C,D)

On va essayer d'éditer les corrections dès que possible :)

 Pour ce qui est de la ré-écriture que mentionne Olyte, c'est plus compliqué que ca en a l'air et pas aussi simple qu'il ne le décrit je trouve. (c'est un sujet qui mérite reflexion, on verra ca surement par la suite, éventuellement en postant un message dédié sur le forum)

En tout cas, merci à tous pour les contributions et les encouragements, c'est pas toujours facile de se motiver mais avec des messages comme ca c'est toujours mieux !

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

25 avril 2013 à 14:35:19

Petit coucou rapide pour tout le monde (dernier message il y a 15 jours, le temps passe vite).

Le tuto n'avance pas très vite, c'est le moins que l'on puisse dire. Cela fait plus d'un mois et demi que le tuto est en attente de validation pour la partie sur les moteurs (Courant continu et servo moteur) sans nouvelles des validos pour le moment.

Ensuite, nous avons voulu commencer les capteurs mais des changements dans nos activités quotidiennes (à olyte et moi) fait que nous avons un peu de mal à communiquer pour bien démarrer l'écriture. Donc pas de nouvelles sur cette partie là pour l'instant.

En attendant, quand j'ai un peu de temps j'avance sur des goodies. Je vous ai ainsi préparé une partie sur "comment alimenter l'Arduino sans l'USB" et je suis en train de finir un plus gros chapitres sur les différentes mémoires et comment on les gères.

Il faudra aussi que l'on s'occupe des différentes parties liés aux remarques mentionnés dans les posts précédents. Comme c'est une tâche moins rigolote (il faut se replonger dans l'écriture d'anciennes parties), on se les garde pour les jours de pluie ^^

C'était Eskimon en direct du tuto Arduino, à vous les studios !

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

25 avril 2013 à 15:20:34

Salut,

cela fait depuis quelques mois que les validos bénévoles n'ont plus accès aux tutos (depuis la v4, en fait). Mais promis, si les editeurs de SimpleIT ne l'ont pas fait, dès qu'on a accès à l'interface de validation, on s'occupe de votre tuto.

  • Partager sur Facebook
  • Partager sur Twitter
64kB de mémoire, c'est tout ce dont j'ai besoin
25 avril 2013 à 15:30:23

Ah mince ! On avais eu une discussion avec Zeina au moment du passage à la V4 car on nous a proposé un accès privé V3 et on en avait profité pour discuter de la validation et il me semblait du coup que le nécessaire était fait pour que le processus de validation/parution soit maintenu...

On va patienter donc, merci de tes infos Nathalya !

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

26 avril 2013 à 14:47:09

Et pour tout ceux qui se demande encore ce qu'on peut faire avec Arduino, voici un exemple que j'ai fait pour la participation à l'atelier Space Invaders !
  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

27 avril 2013 à 21:59:49

Plutôt sympa ce que t'as posté sur l'atelier ! :)

  • Partager sur Facebook
  • Partager sur Twitter
27 avril 2013 à 22:25:53

Merci ^^ C'était histoire de s'amuser un peu et d'être original par rapport à tous les scripts JavaScript qui allaient être posté...
  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

5 mai 2013 à 10:43:46

Bravo : Super tuto !!!

J'ai hâte de lire les nouveaux chapitres !

  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2013 à 11:11:31 - Message modéré pour le motif suivant : plop


11 mai 2013 à 11:29:46

Poste sur le forum C.

De plus, met ton code dans une zone "Code".

  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2013 à 11:54:33

@blackwolf44 : "donc j'ai choisi ce topic aléatoirement" > Ha ouais non ça ne marche pas comme ça sur ce site. Si tu veux une réponse, va poster ça sur le forum C. Et pense à utiliser la balise "code" qu'on y vois quelque chose. Mais en tout cas, pas dans ce sujet.

  • Partager sur Facebook
  • Partager sur Twitter
15 mai 2013 à 16:50:56

Bon ben merci pour ce tuto exceptionnel

j'ai lu le tuto en 1 jour (ne me tapez pas ;)) et je n'ai pas encore d'arduino, mais je le trouve très très bien conçu  parfois on ne comprend pas les explications de premiers coups alors on est obligé de recommencer car il manque quelques informations pour comprendre et j'ai vu quelques fautes d'orthographes, quand je le relirai je les noterai et je vous en ferai part.

J'ai vraiment hâte de lire les nouveaux chapitres aussi

Merci 

  • Partager sur Facebook
  • Partager sur Twitter
15 mai 2013 à 20:12:57

Merci merci, ca fait toujours plaisir d'entendre ca :)

Pour le coup de "relire deux fois" je pense que le tort ai partagé ^^ Si tu lis trop vite tu ne feras pas attention et donc ca n'accrochera pas dans ta tête, mais je reconnais aussi que des fois nos formulations peuvent être mauvaise (pas toujours facile de toujours écrire correctement).

Pour les fautes il doit en rester, mais depuis quelques chapitres/parties on a un correcteur qui s'en occupe et crois moi il fait du bon boulot vu les tartines qu'on lui met ^^ (en tapant au kilomètre)

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

15 mai 2013 à 22:27:39

Non je ne pense pas que je lise trop vite, je connais assez bien la théorie de l'électromagnétisme en ce qui concerne les composants traités et je programme déjà en C donc ce domaine m'est familier.

Mais il y a des fois j'ai vraiment était bloqué je ne comprenais vraiment pas, par exemple pour le PWM je ne comprenais pas pourquoi le signal que l'on émettait était périodique (de grande période) alors qu'on avait à faire qu'a du courant continu.

Un autre exemple au début lorsqu'il s'agit des afficheurs 7 segments vous expliquez que on va éteindre pendant 10ms le signal d'un afficheur puis le rallumer juste après pendant 10 ms et que l'utilisateur ne verra pas la différence car on ne peut pas discerner le changement, mais dans ce cas là pourquoi on percevrai que la lumière est allumé la moitié du temps et non pas qu'elle est éteinte la moitié du temps.

Sinon vous allez très loin dans la théorie ce qui est très bien encore félicitation

  • Partager sur Facebook
  • Partager sur Twitter
15 mai 2013 à 22:36:18

Pour l'afficheur, on percoit qu'il est allumé à cause de la persistance retinienne. La lumière "s'imprime" sur ton oeil pendant un instant (alors que l'absence de lumière n'imprime rien)
  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

29 mai 2013 à 13:58:13

Bonjour ! ^^"


Je me permet de vous dire que je crois que j'ai trouvé une erreur toute petite, c'est pas énorme mais on sait jamais pour les rageux. Dans la partie des 74HC595 tout a la fin dans la partie "Pas assez ? Augmenter encore !". C'est marqué dans l'avant dernier paragraphe
"Par exemple, si vous voulez réaliser un cube de LED (disons 4x4x4 pour commencer gentiment). Si vous vouliez donner une broche par LED vous seriez bloquer puisque Arduino n'en possède pas autant (il vous en faudrait 32)."
Or je crois que 4*4*4 ca fait 64 pour une broche par LED, mais bon je suppose que vous entendiez 32 sorties si c'est mis en matrice. :)

Voilou, encore encore merci pour le tuto, je suis a l'affut des nouveaux chapitres ! :)

  • Partager sur Facebook
  • Partager sur Twitter
29 mai 2013 à 14:00:59

Arf merci du retour ! c'est ce qui se passe quand on écrit tard le soir ^^
  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

3 juin 2013 à 21:22:39

Chapitre "Programmons pour utiliser ce composant"

Remplacer (2 fois dans la page)

     if(sens)
        //envoie la donnée en allant de droite à gauche, en partant d'un masque de type "00000001"
        digitalWrite(dataPin, donnee & 0x01<<i);
     else
        //envoie la donnée en allant de gauche à droite, en partant d'un masque de type "10000000"
        digitalWrite(dataPin, donnee & 0x80>>i);
Par
     if(sens)
        //envoie la donnée en allant de droite à gauche, en partant d'un masque de type "00000001"
        digitalWrite(dataPin, (donnee & (0x01<<i)) >> i);
     else
        //envoie la donnée en allant de gauche à droite, en partant d'un masque de type "10000000"
        digitalWrite(dataPin, (donnee & (0x80>>i)) >> (7-i));

-
Edité par kevinmille 3 juin 2013 à 21:26:51

  • Partager sur Facebook
  • Partager sur Twitter
3 juin 2013 à 21:53:31

euh... tu peux justifier je vois pas pourquoi tu veux faire ca...
  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

4 juin 2013 à 15:06:50

En fait, de façon canonique, on écrit plutôt (((data) >> (bit)) & 1)

Ce qui permet d'avoir le mask à droite, sans avoir à le décaler (ce qui devient moins trivial quand le masque vaut autre chose que 1), en ne faisant que 1 seul décalage.

Sinon, à choisir, je préfère la version d'Eskimon.

-
Edité par Natalya 4 juin 2013 à 15:09:36

  • Partager sur Facebook
  • Partager sur Twitter
64kB de mémoire, c'est tout ce dont j'ai besoin
4 juin 2013 à 19:10:24

Prenons un exemple.

Si i = 7, (donnee & (0x01<<i)) = (donnee & 0x08)

On récupère donc un octet constitué du bit MSB suivi de 7 zéros.

Pour récupérer juste le bit MSB, il faut effectuer un décalage de 7 bits vers le LSB.

Ma proposition précédente permet de comprendre ce qui manque au code pour être correct.

Pour une écriture plus compacte :

if(sens)
   //envoie la donnée en allant de droite à gauche
   digitalWrite(dataPin, (donnee >> i) & 1);
else
   //envoie la donnée en allant de gauche à droite
   digitalWrite(dataPin, (donnee >> (7-i)) & 1);

-
Edité par kevinmille 4 juin 2013 à 19:20:22

  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2013 à 19:20:21

Ah effectivement j'avais pas fait gaffe : digitalWrite(dataPin, donnee & 0x01<<i); Avec donnée qui vaut 1, i qui vaut 3, donnee & 0x01<<i vaut 8[1], alors qu'on voudrais la valeur du bit 3, à savoir 0

PS : [1] : c'est faux, je me suis plantée dans la BNF du C

-
Edité par Natalya 5 juin 2013 à 17:23:58

  • Partager sur Facebook
  • Partager sur Twitter
64kB de mémoire, c'est tout ce dont j'ai besoin
5 juin 2013 à 16:21:40

Je vois pas vraiment ou est le problème... le but du jeu est de savoir si le bit sélectionné est 1 ou 0.

Si je reprend l'exemple de Nathalya :

donnee = 1 : 0000 0001
i = 3

du coup donnee & 0x01 << 3 ce décompose comme [donnee & (0000 0001 << 3)] = [donnee & 0000 1000] = [0000 0001 & 0000 1000] ce qui donne 0 comme attendu (donc la pin sera éteinte)

Si on avait pris "donnee = 0x0f" par exemple, on aurait eu :
[donnee & (0000 0001 << 3)] = [donnee & 0000 1000] = [0000 1111 & 0000 1000] ce qui donne 1, true (donc la pin sera allumée)

Bref, je vois pas vraiment ou est le problème... Si je comprend bien le raisonnement de kevinmille l'objectif serait de mettre le bit sélectionnée en LSB (ce qui est rigoureux et correct) mais je fais le choix de simplement sélectionner le bit pour avoir à la fin un true / false.

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

5 juin 2013 à 17:29:17

Non, effectivement, si le compilo Arduino est C-compliant, une shift-expression est parsée avant une AND-expression. Donc Eskimon a raison. Cela dit, je continue à préférer la forme (donnee >> i) & 1, qui a l'avantage de donner 0 ou 1 (ce qui évite pas mal de problèmes avec les BSP codés pour être légers plutôt que robustes), et d'expliciter les priorités (ce qui est utile sur des compilos pouris).

  • Partager sur Facebook
  • Partager sur Twitter
64kB de mémoire, c'est tout ce dont j'ai besoin
5 juin 2013 à 17:42:07

Ouai c'est vrai que j'ai pas vraiment pensé à mettre les parenthèses à cause de l'habitude... J'avais l'habitude de faire ça pour les registres de microcontrôleur (codé en C) et donc ça passais, du coup je me suis pas trop posé de question vu que ca a marché de suite comme je voulais... mais expliciter les priorités avec les parenthèses serait pas une mauvaise idée... je vais voir à reformuler tout ca...

Merci des remarques :)

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !