Aller au contenu


Photo
- - - - -

Géré la vitesse de mon moteur pas a pas


22 réponses à ce sujet

#1 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 24 décembre 2020 - 08:32

Bonjour à tous .

J'ai équipé ma monture de télescope d'un moteur pas a pas nema 17 en 12v qui lui est relié à un driver et arduino.
J'ai programmé l'arduino de façon à ce que le moteur tourne dans un seul sens à la vitesse souhaitée.
En gros bouton on ,il tourne et le télescope suis mon étoile, bouton off, il s'arrête.
Mais le problème est que il y a de la pignonerie pour la démultiplication, et quand je allume le moteur il y a un léger retard, du au jeu dans les pignions.
Alors est t'il possible d'accélérer ou de freiner le moteur? Sans toucher à mon programme de l'arduino.
A mon avis vous allez me demander les références du driver et l'arduino.
Une photo peut faire l'affaire ?

#2 Fluburtur

Fluburtur

    Membre

  • Membres
  • 48 messages
  • Gender:Male
  • Location:Fontainebleau

Posté 24 décembre 2020 - 10:56

Il te faudrait peut etre un retour avec un encodeur a la sortie du réducteur, ou entrainement par courroie comme ça pas de jeu.



#3 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 25 décembre 2020 - 08:38

J'ai pensé à la courroie mais ça me fait changer tout mon système.
L'idéal serait de rajouter 2 boutons poussoir sur l'arduino, un pour freiner et l'autre pour accélérer,et de revenir à la vitesse d'origine quand les boutons ne son pas actionné.
Mais je ne sais pas si c'est possible de le faire.

#4 jpbbricole

jpbbricole

    Membre

  • Membres
  • 19 messages
  • Gender:Male
  • Location:CH1804 Corsier-Sur-Vevey
  • Interests:Informatique, électronique, Arduino, CNC (petite) ...

Posté 25 décembre 2020 - 09:23

Bonjour Victorien

 

C'est possible d'ajouter des boutons pour modifier la vitesse, mais pas sans modifier, un petit peu, ton programme.

Le mieux c'est que tu le mettes en ligne.

 

Par contre, je n'ai pas compris l'utilité des bouton à propos du jeu dans les pignons.

 

Cordialement

jpbbricole


L'expérience est la seule chose qu'il ne faut acheter que d'occasion!


#5 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 25 décembre 2020 - 11:28

Bonjour,

je penses (mais je me trompe peut-être), que le but des boutons est d'aller un peu plus vite (ou moins vite/en arrière) de manière à rattraper le jeu pour re-aligner le télescope avec l'étoile.

Avec le mode actuel, il n'y a qu'une seule vitesse (celle de déplacement de l'étoile dans le ciel), du coup, si initialement il y a une erreur d'alignement, on ne peut pas la rattraper.

 

Si tu nous donnes le programme arduino actuel qui fonctionne, alors ça devrait suffire pour t'aider à ajouter les boutons et modifier le code du programme.

En revanche, sans modifier le programme, c'est quasiment impossible (je dis quasiment, car on pourrait sûrement inventer un circuit électronique ad-hoc, mais ce serait 10 fois plus compliqué que de modifier le code). Le seul petit espoir que je vois de ce coté là est si par chance ton driver a déjà des boutons prévus pour déplacer le moteur, dans quel cas il suffit d'appuyer sur ceux-ci.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#6 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 30 décembre 2020 - 10:11

Coucou les copins ,désolé de ne pas avoir répondu plus vite .
Je met mon driver et la carte arduino.
Demain je vais essayer de metre le programme.
Le driver en question est en mode micro pas .donc les mode 0 1 et 2 sont en 5v .

Image(s) jointe(s)

  • Screenshot_20201230-215455_Chrome.jpg
  • Screenshot_20201230-215324_Chrome.jpg


#7 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 30 décembre 2020 - 10:41

Alors je sais pas ci ça va le faire mais j'ai pris une photo de l'écran du programme.
Parceque je n'arrive pas à faire une capture d'écran avec l'ordi. ☹

Image(s) jointe(s)

  • 20201230_222952.jpg


#8 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 31 décembre 2020 - 11:33

Bonjour,

Pour les composants, le mieux est un lien vers le site où tu l'as acheté, comme ça on a toutes les infos.

Pour le driver du moteur, c'est  : https://www.gotronic...-2998-31133.htm

Pour le clone d'arduino, il n'y a pas forcément besoin d'ici, il nous suffit de savoir que c'est un clone d'arduino Uno.

 

Pour le code, l'idéal est de copier-coller le code en tant que texte sur le forum : comme ça, on peut le modifier. Le mieux est de la mettre dans une balise code (icone <>), comme ça il est mis en page et coloré.

 

 

Pour ton cas, il y a deux options :

1) Tu ajoute 2 boutons à l'Arduino (à brancher entre GND et un pin 2 à 13 inoccupé (voir A0 à A5, ça marche aussi)). On peut ensuite très facilement t'aider à adapter le code pour avoir exactement le comportement voulu (par exemple multiplier la vitesse par 0.235 si tu appuie sur le premier et par 3.14 si tu appuie sur le second, ou tout autre comportement (vitesse négative, vitesse qui augmente plus tu reste appuyé longtemps, ...). Si tu veux encore plus de comportements, il suffit d'ajouter 1 ou 2 boutons de plus

2) Ton driver offre quelques astuces pour "bidouiller" avec des signaux électriques sans toucher au code arduino, mais ça ne laisse que quelques options :

- tu peux faire accélérer le moteur en remplaçant provisoirement le mode 1/128 de pas par un mode de pas plus grand (pas entier, 1/2 pas, 1/4 pas, 1/8 pas, 1/16 pas, 1/32 pas ou 1/64 pas). Tu peux donc aller 128, 64, 32, 16, 8, 4 ou 2 fois plus vite (nb : avec un bouton, tu ne peux choisir qu'une de ces vitesses). Pour cela, il choisit d'utiliser un bouton (normalement fermé) qui te permette de couper le 5V des bon pins mode0, mode1, mode2

- tu peux arrêter le moteur avec un bouton (normalement fermé) qui coupe le 5V du pin ENABLE. NB : dans le cadre du micro-pas, je ne suis pas sur quel est l'effet exact : il est possible que tu ai un "saut" de jusqu'à 1 pas au moment ou tu enfonce le bouton et/ou que tu le relache. NB : si tu fais ça, le moteur n'est plus alimenté : je pense que tu peux alors le faire tourner à la main, mais ça veut aussi dire que si quelque chose d'externe essaye de le faire tourner, il risque de tourner

- tu peux arrêter le moteur en mettant un bouton (normalement fermé) qui coupe le fil du pin 5 de l'arduino vers le pin clk du driver : c'est probablement une meilleur solution (l'erreur engendrée ne devrait pas dépasser les 2 micro-pas (au lieu de 2 pas pour l'option précédente)

- tu peux inverser le sens de rotation en jouant sur le pin DIR : il faut le relier à 5V pour changer de direction. A noter qu'à priori la direction que tu utilises actuellement est celle "par défaut", donc tu peux te passer du fil entre l'arduino et le pin DIR : tu peux alors relier le pin dir au 5V via un interrupteur normalement ouvert. Alternativement, tu peux aussi garder le fil du pin 4 vers DIR en intercalant un bouton normalement fermé, et en ajoutant une résistance entre le pin DIR et le 5V (cette résistance sera de préférence entre 1 kilo-ohms et 10 kilo-ohms, sachant qu'à priori tout ce qui est entre 250 ohms et 100 kilo-ohms devrait marcher)

 

 

De mon coté, je te suggérerais plutôt l'option 1, qui permet de choisir exactement le comportement que tu veux (si tu nous explique quel comportement tu veux, on t'aidera à l'obtenir).

Si vraiment tu ne veux pas toucher à l'arduino, tu as l'option 2 : si tu as besoin d'aide, dis moi quels "hacks" t'intéressent et où tu bloque pour les mettre en place, et je détaillerais plus


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#9 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 31 décembre 2020 - 01:43

Coucou sandro
L'option 1 me plais beaucoup plus que l'option 2 .
Car oui j'ai pensé aussi à jouer avec les modes micro pas sur le driver ,mais je n'aurais pas exactement les vitesse souhaitée.
Alors que la 1 serai la solution que je recherche .
Donc si je comprends bien, il faut que je relis sur l'arduino, le GND avec une pin 1 avec un interrupteur entre les deux. Et rebelote pour le deuxième bouton .
Par contre pour le programme ca va ce compliqué un peu.

#10 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 31 décembre 2020 - 11:18

Bonsoir,

je suis aussi de l'avis que l'option 1 est mieux, mais vu que tu demandais initialement l'option 2, j'ai mis les deux.

 

Donc on part pour l'option 1.

 

Pour les interrupteurs, il faut les mettre entre GND et un pin de l'arduino. Il ne faut PAS utiliser les pins 0 ou 1 (ils servent à la communication avec l'ordinateur) : n'importe quel pin libre de 2 à 12 fait parfaitement l'affaire.

Idem pour le second bouton.

Pour le type de boutons, normalement ouvert ou normalement fermé, c'est peu importe (c'est juste le code qui change un petit peu). Ensuite, tu as le choix entre des interrupteurs sur lesquels il faut rester appuyé, ou des intérrupteurs qui se relâchent de tout seul quand tu arrête de les enfoncer : là, à toi de choisir selon le comportement que tu souhaite (et ce que tu as sous la main).

 

 

Pour le code : est-ce que ça t'intéresse d’apprendre à le faire, ou tu veux juste que ça fonctionne? Envisages-tu d'autres améliorations ensuite ou d'autres projets? Si vraiment tu ne t'intéresse pas du tout à apprendre à programmer et que tu ne comptes pas faire d'autres projets avec arduino ou d'améliorations, alors je peux juste te faire le code. Sinon, je te guiderais pour que tu le fasse toi.

 

 

Dernier point, et pas des moindres : quel comportement souhaites-tu exactement (il faut être très précis, comme une recette de cuisine).

 

Quelques idées de comportements :

- pas de bouton = v1, bouton 1=v2, bouton 2=v2 (facultatif : bouton 1 et 2 en même temps =v3)

- bouton 1 : augmenter la vitesse progressivement (revient à la vitesse normale si on relache) ; bouton 2 : réduire la vitesse progressivement (revient à la normale si on relache)

- bouton 1 : augmenter la vitesse de x; bouton 2 : réduire la vitesse de x (nb : on ne revient pas à la vitesse de départ

 

Libre à toi de proposer d'autres comportements si tu préfère


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#11 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 02 janvier 2021 - 08:30

Alors .
L'idéal serait
(En prenant compte que les deux boutons seront des poussoir ,qui seront ouverts en temps normal et fermé quand j'appuierai dessus )
Donc pour le bouton 1.
J'appuie et il diminue la vitesse de 2% ,je relâche et le moteur reprend sa vitesse initiale.
Pour le bouton 2.
J'appuie et il augmente la vitesse de 2% ,je relache et il reprend sa vitesse initiale.
Je pense qu'une variation de 2% serait suffisante, mais, sera t'il possible de corriger par la suite ?
Comme pour mon premier programme, je l'avai fait sur mesure en modifiant le tempo pour tomber sur la bonne vitesse .

Et pour le programme .
Je voudrais bien le faire, parceque le copié collé ne me plaît guère. Et apprendre à faire un peut de programme ne me fera pas de mal .
D'autant que tu m'avais guidé pour mon premier programme, alors pourquoi ne pas continuer. 😅

#12 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 02 janvier 2021 - 10:15

Bonsoir,

ça me vas.

 

Donc si je résume:

- aucun bouton enfoncé : v=v0

- bouton 1 enfoncé : v=0.98*v0

- bouton 2 enfoncé : v=1.02*v0

 

Il reste donc un petit point pas clair : que faire si les deux boutons sont enfoncés en même temps?

J'ai 5 propositions :

- choisir une vitesse particulière (par exemple v=v*1.5)

- prendre une vitesse nulle

- faire comme si seulement le bouton 1 est enfoncé

- faire comme si seulement le bouton 2 est enfoncé

- considérer que ça n'arrivera jamais et qu'on s'en moque de ce qui se passe si l'utilisateur est assez bête pour essayer (en pratique, ça reviendra probablement à faire comme si un seul des boutons est enfoncé, lequel dépendra de la manière exacte dont le code est écrit)

 

 

 

Pour passer à la pratique (les premières étapes sont indépendantes de la réponse à la question ci-dessus), je te propose de commencer à apprendre à :

- afficher des variables (ce sera utile pour comprendre ce qui se passe)

- lire une entrée numérique et l'afficher

 

Pour cela, je te propose de commencer par les étapes suivantes, dans l'ordre :

1) Choisis un pin X (X étant un pin entre 2 et 12 qui n'est actuellement pas utilisé) : il servira plus tard pour un des boutons

2) crée un nouveau programme arduino (on combinera plus tard au programme actuel)

3) affiche un texte de ton choix sur le moniteur série (iel apparaitra sur ton ordinateur)

4) affiche une variable de ton choix

5) relie le pin X à 5V avec un fil

6) configure le pin X en entrée

7) lis la valeur du pin X, enregistre là dans une variable et affiche la : tu devrais afficher un 1 (1 signifie état haut, c'est à dire 5V)

8) enlève le fil qui vas de X à 5V, et mets à la place un fil qui vas de X à GND : tu devrais maintenant afficher 0 à la place de 1

 

Ensuite, on passera à la lecture du bouton, ce qui revient à une lecture d'entrée analogique avec une petite subtilité en plus

 

 

S'il y a un point qui n'est pas clair ou sur lequel tu bloque, n'hésites pas à demander.

Tu trouvera pas mal d'informations ici : https://nboulaire.de...mation-arduino/  (ou sur d'autres tutos arduino)

 

Bonne soirée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#13 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 04 janvier 2021 - 10:43

Ok je vais lire avec attention le lien que tu la envoyé.
Et m'exercer un peu .
Pour ce qui est des deux boutons enfoncés en même temps. Pourquoi pas leur donner la fonction de faire accélérer progressivement, mais bon ,je n'en n'aurais pas l'utilité pourle moment.
Mais bon .
Je vais d'abord m'exercer un peu .
Et je reviens bientôt pour des conseils. 😅

#14 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 06 janvier 2021 - 08:36

Bonjour sandro
Voilà, j'ai lu le lien que tu ma envoyé, (pas tout )
Très intéressant mais à la fois compliqué pour moi .
J'ai donc essayé de changer mon programme initial.
Bien que tu m'avais dit de faire a part le programme ,et ensuite de le greffer par la suite .
Mais je bloque au niveau de la vitesse .
Comment changer une vitesse avec des boutons ,qui elle-même n'existe pas sur ce programme, ?
Je suis dans le flou totale.
Je met mon début de programme sur le poste suivant.
Pour savoir si je fais bonne ou fossé route.

#15 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 06 janvier 2021 - 09:18

Bonsoir,

la vitesse n'existe pas directement, il est vrai, mais tu as une variable tempo, qui est grosso-modo inversement proportionnelle à la vitesse : c'est sur elle qu'on jouera (ou alors on créera une variable vitesse qui servira à calculer tempo).

 

Après, je continue à penser qu'il est plus facile d'apprendre à utiliser les boutons dans un programme séparé. N'hésites pas à essayer de faire les 8 premières étapes que j'ai proposé et de poster le résultat pour chacune. Si tu bloque sur l'une d'elle, je t'aiderait.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#16 jpbbricole

jpbbricole

    Membre

  • Membres
  • 19 messages
  • Gender:Male
  • Location:CH1804 Corsier-Sur-Vevey
  • Interests:Informatique, électronique, Arduino, CNC (petite) ...

Posté 07 janvier 2021 - 11:40

Bonjour Victorien

 

Voilà une solution qui s'intègre à ton programme.

Il y a 2 boutons,  

boutonAccelerer sur pin 6

boutonRalentir sur pin 7

 

Ils sont câblés au GND, donc on lit LOW quand pressé.

Pour modifier la vitesse du MPAP ce sont les variables:

int tempoAccelerer= -500;

int tempoRalentir = 1000;
 
et le programme qui "s'inspire" de la copie d'écran du post #7.
 
/*
    Name:       Vitesse MPAP
    Auteur:     jpbbricole
*/
int tempo = 2080;
int tempoAccelerer = -500;
int tempoRalentir = 700;
int tempoAddition = 0;

#define driverDirPin 4
#define driverStepPin 5    
#define boutonAccelererPin 6    
#define boutonRalentirPin 7 

void setup()
{
	pinMode(driverDirPin, OUTPUT);
	pinMode(driverStepPin, OUTPUT);

	pinMode(boutonAccelererPin, INPUT_PULLUP);  // L'autre cote du bouton au GND
	pinMode(boutonRalentirPin, INPUT_PULLUP);   //         "        "        "

	digitalWrite(driverDirPin, LOW);     // On met la broche DIR a l'etat bas
}

void loop()
{
	for (int i = 0; i <= 200; i++)
	{
		tempoAddition = 0;
		if (digitalRead(boutonAccelererPin) == LOW)        // Si le bouton accelerer est presse
		{
			tempoAddition = tempoAccelerer;
		}
		else if (digitalRead(boutonRalentirPin) == LOW)  // Si le bouton freiner est presse
		{
			tempoAddition = tempoRalentir;
		}

		digitalWrite(driverStepPin, LOW);
		delayMicroseconds(tempo + tempoAddition);
		digitalWrite(driverStepPin, HIGH);
		delayMicroseconds(tempo + tempoAddition);
	}
}

Cordialement

jpbbricole

 

 


L'expérience est la seule chose qu'il ne faut acheter que d'occasion!


#17 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 07 janvier 2021 - 10:03

salut les copins 

 

jpbbricole ,merci de venir aussi a mon aide .

Mais , sur le programme que tu a fait , que veu dire #define ? tu definis les pins en les nomment ? par ce que dans mon programme de base le #define n'apparait pas .

et donc si je prend par exemple : #define driverDirPin 4 , ca veu dire que tu nome tout simplement la pin numero 4 de l'arduino ?

alors es que je pourrais l'appeler #define quelconque 4 ? et qu'il faudra juste que j'utilise se meme nom pour cette pin numero 4 par suite .

 

 

 

et y a t'il une sorte de dictionnaire pour expliquer les mots de la biblioteque de l'arduino 

car j'ai l'impression que je comprendrait mieux si je comprend les mots .

 

 

sandro pour les huits premieres etapes .

le texte inscrist dans le moniteur serie vas aparaitre x foit selon la variable donnée quand la pin (7 par exemple ) sera a létat haut (5volt ).c'est sa ?



#18 Osirys

Osirys

    Nouveau membre

  • Membres
  • 6 messages

Posté 07 janvier 2021 - 10:18

salut les copins 

 

jpbbricole ,merci de venir aussi a mon aide .

Mais , sur le programme que tu a fait , que veu dire #define ? tu definis les pins en les nomment ? par ce que dans mon programme de base le #define n'apparait pas .

et donc si je prend par exemple : #define driverDirPin 4 , ca veu dire que tu nome tout simplement la pin numero 4 de l'arduino ?

alors es que je pourrais l'appeler #define quelconque 4 ? et qu'il faudra juste que j'utilise se meme nom pour cette pin numero 4 par suite .

 

 

 

et y a t'il une sorte de dictionnaire pour expliquer les mots de la biblioteque de l'arduino 

car j'ai l'impression que je comprendrait mieux si je comprend les mots .

 

 

sandro pour les huits premieres etapes .

le texte inscrist dans le moniteur serie vas aparaitre x foit selon la variable donnée quand la pin (7 par exemple ) sera a létat haut (5volt ).c'est sa ?

 

Hello Victorien,

 

Pour le #define, en effet il permet de donner un nom à ton pin, ce qui est ensuite bien plus pratique dans les programmes, on comprends mieux driverDirPin que le simple chiffre 4 ;)

 

Pour le dictionnaire je te propose de regarde sur le site arduino directement les références : https://www.arduino....-syntax/define/

Si tu n'es pas caler en anglais tu peux aussi regarder ici : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Define

 

Pour les étapes qui te sont donner par Sandro, c'est pour que tu puisses avancer pas à pas, tu n'auras pas 8 fois le message dans le moniteur série.

Le premier message que tu auras sera à l'étape 3 lors de la création d'un programme écrivant justement un message

Ensuite étape 4 tu modifie le message par une variable, tu alimentes la variable et tu inscrit le contenu de ta variable dans el moniteur etc etc...

 

Si besoin je peux également te filer un coup de pouce sur le code ;)



#19 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 07 janvier 2021 - 11:14

Bonsoir,

 

Pour trouver des informations sur les mots clefs :

en général, si tu tapes arduino suivit du mot clef dans ton moteur de recherches favoris, tu trouves très facilement une explication (le site arduino est très fourni, mais c'est pas toujours traduit en français)

 

Plus généralement, tu as deux types de mots clefs :

- ceux du C et du C++ (deux langages de programmation très utilisés, y compris sur ordinateur, le C++ étant une extension du C) : le "language arduino" est construit sur le C avec une partie du C++

- les mots clefs propres à l'Arduino (comme pinMode, digitalRead, digitalWrite, ...) qui couvrent principalement les interactions avec le matériel

 

Pour les étapes que j'ai suggérées :

l'idée était que tu partes d'un programme vide que tu modifie successivement pour réaliser les différentes étapes, de manière à comprendre progressivement comment utiliser les différents concepts du langage arduino.

 

pour le #define :

 

VERSION COURTE :

#define mon_nom 42

vas remplacer mon_nom par 42 dans le code (c'est souvent plus clair à lire, et ça permet de changer la valeur partout dans ton code en changeant juste une valeur).

N'héssayes pas de remplacer 42 par un calculs tant que tu n'aura pas compris toutes les subtilités de #define

Ne te focalise pas trop sur la version longue (voir ne la lis pas) : elle est bien plus complexe, même si je n'y ai volontairement abordé qu'une petite partie de ce qu'on peut faire avec: c'est très puissant, mais souvent très complexe
 

VERSION LONGUE:

 

- le # indique que c'est une directive pré-processeur, c'est à dire quelque chose qui est fait avant que le code ne soit réellement compiler (si tu continue à programmer en arduino, tu en verra d'autres, en particulier #include qui permet d'utiliser une librairie (ie un ensemble de fonctions écrit par quelqu'un d'autre).

- le code

#define un_mot_cle se_qui_remplacera_le_mot_cle

vas donc remplacer "un_mot_cle" par "se_qui_remplacera_le_mot_cle" partout dans le code (nb : on ne remplace pas si un_mot_cle n'est qu'une partie d'un nom plus long).

Un usage classique est de s'en servir pour définir en début de programme une "valeur" qui ne change jamais, et qu'on peut ensuite re-utiliser dans le programme.

 

Par exemple

#define un_nombre 42
#define un_texte "hello world"
#define un_calcul (2+3)
#define un_autre_calcul 4+5

Serial.println(un_nombre);
Serial.println(un_texte);
Serial.println(un_calcul);
Serial.println(un_autre_calcul);
Serial.println(3*un_calcul);
Serial.println(3*un_autre_calcul);

Sera transformé après le passage du pré-processeur en :

Serial.println(42);
Serial.println("hello world");
Serial.println((2+3));
Serial.println(4+5);
Serial.println(3*(2+3));
Serial.println(3*4+5);

Ce qui est vicieux, c'est que ce n'est pas réellement une valeur qu'on remplace, mais le texte lui-même. La dernière ligne est donc particulièrement vicieuse, et donnera 17 au lieu de 27 comme on pourrait penser au premier abord.
 

 

Dans un premier temps, je te conseillerais de ne pas te servir de define, où alors uniquement pour définir des valeurs que tu donnes directement.

 

Si un jours tu fais des programmes bien plus poussés, alors il sera toujours temps de te plonger dans les subtilités de #define (utiliser define permet de ne pas créer une variable pour la valeur et donc de gagner un peu en place et d'optimiser run peu mieux le code (ce qui est parfaitement inutile pour de petits programmes), et permets un certain nombre de trucs "tordus", comme créer des lignes de code selon la situation).
 

En résumé, je te conseille vivement de n'utiliser que la version courte (ou de ne pas utiliser #define du tout) tant que tu n'as pas une bonne expériance.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#20 Victorien

Victorien

    Membre occasionnel

  • Membres
  • Pip
  • 96 messages

Posté 18 janvier 2021 - 03:42

coucou tous le monde .

me revoila un peu tardivement car beaucoup de travaille ,ce qui ne fait pas avancer mon projet .

je me rend compte que je me suis l'ansé dans quelque chose que je ne métrise pas du tout en voulant en plus sauter les étapes , avec un gros manque de temps et n'ayant aucune base dans la programmation ,  :Alvarin_07:    ben c'est pas possible .

je comprend pourquoi sandro voulais me faire commencer par des choses simples .mais il me faudrais beaucoup plus de temps (chose que je n'ais pas en ce momment ).

alors dans l'immédiat je vais tout bètement copier le programme de jpbbricole (je panse qu'il a l'air bien) 

et ensuite quand j'aurais plus de temps je reviendrais vous voir pour des conseille de débutent :yahoo:

et encor merki les copains ,sourtout a toi sandro car mine de rien des le début de mon projet tu ma bien dépané pour mon moteur pas a pas .





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users