je me ballade sur les groupes et forum arduino depuis un petit moment, j’ai suivis des cours open classroom je commence a comprendre les bases, mais je n’ai pas encore les connaissances pour arriver au projet final.
je vous explique ce que je veux au final. faire tourner un moteur pas à pas à 1 tour/min (ça j’y arrive)
mais pour pouvoir peaufiner je souhaite rajouter 4 boutons, 1 pour démarrer, 1 pour augmenter doucement la vitesse, 1 pour retour arrière très rapide (a fond) et 1 pour arrêter le moteur je me suis cassé les dents sur programme pendant 2 jours, j’ai donc revu ma copie à la baisse et repartir sur 1 seul bouton pour le moment, j’y suis depuis hier et je n’avance que très peu, je souhaite vous montrer mon code et montages pour que vous m’aiguillez un peu svp. merci.
ici le moteur tourne bien à la vitesse souhaité de base, le bouton est censé faire tourné le moteur à l’envers quand je l’actionne, mais je ne parvient pas a faire changer l’état du bouton à 1, il reste à 0. une petite idée ? est ce mon montage ? est ce le code ? je penche plus sur le code mais bon …
tout vos conseils seront les bienvenus svp
le code :
#include <Stepper.h>
int Bouton = 2;
int nbreDePas = 64;
Stepper moteur(nbreDePas, 3, 4, 5, 6);
int steps = 100;
void setup()
{
Serial.begin(9600);
pinMode (Bouton, OUTPUT); // indique bouton sortit info
moteur.setSpeed(32);
}
void loop() {
Bouton = digitalRead(2);
Serial.println(Bouton);
int Bouton = digitalRead(Bouton); // cherche infos sur valeur du bouton
if ( Bouton == 1 ) //
{
moteur.step(steps * -1);
}
else if (Bouton == 0 ) {
}
moteur.step(steps);
}
hello
tu a declaré Bouton en sortie alors qu'il doit etre en INPUT ou INPUT_PULLUP
edit:
tu te mélanges les crayons avec Bouton:
tu declares que Bouton = 2 ; donc ton Bouton Poussoir est raccordé à D2
que tu déclares en sortie dans le set up ( voir plus haut)
ensuite dans la loop tu mets Bouton = digitalRead(2); donc Bouton = 0 probablement .
puis tu envoies Bouton sur le moniteur
et ti redéclares une variable INT Bouton à laquelle tu affectes la lecture de digitalRead(Bouton);
là ça devient mystérieux. comme tu crées INT Bouton, elle vaut 0 puis tu lui affectes la lecture d'elle meme. donc tu lis la pinoche D0 qui est RX ou TX de la liaison série avec le moniteur.
en résumé:
une variable déclarée en tete du code à une portée globale et est donc vue par tout le code
une variable déclarée dans le code de la loop ou d'une fonction, à une portée locale
on ne prends pas deux fois le meme nom pour déclarer deux variables. et on choisit des noms qui nous parlent ( c'est plus facile ensuite pour suivre le code)
et pour finir, lorsque tu déclares la pinoche D2 comme étant cablé à ton Bouton poussoir, c'est donc un cablage fixe et D2 sera toujours affecteé à cette tache. c'est donc une constante que tu peux déclarer :
const Byte Bouton_poussoir=2;
ou #define Bouton_poussoir 2
ensuite, pour lire le Bouton_poussoir, tu déclres une variable : Byte etat_Bouton_poussoir = 0;
et pour lire le Bouton_poussoir: etat_Bouton_poussoir=Bouton poussoir;
Et il y a confusion entre la variable Bouton qui déclare le numéro de la broche sur laquelle est connecté le bouton et la variable Bouton qui va mémoriser l'état du bouton.
Une bonne pratique:
const int pin_bouton=2; // broche sur laquelle on connecte le bouton
unsigned char etat_bouton; // memorise l'etat de la broche bouton
est ce que j’ai bien compris en faisant ainsi ?
avec ce code j’ai enfin un changement d’état je passe de 1 normal à 0 quand j’appuie (j’avoue que je m’attendais a l’inverse mais au moins je peut lire maintenant le changement !
maintenant je n’ai toujours pas d’effet au changement, rien de different entre 1 et 0, je retourne voir les differents tuto que j’ai sous la main si je vois un indice !
si vous avez des pistes là dessus je suis preneur aussi ^^
merci en tout cas j’avance un peu enfin apres quelques jours de point mort !
ça fait plaisir et ça motive !
#include <Stepper.h>
const int Bouton_poussoir=2; // broche sur laquelle on connecte le bouton // broche sur laquelle on connecte le bouton
unsigned char etat_Bouton_poussoir; // memorise l'etat de la broche bouton
int nbreDePas = 64;
Stepper moteur(nbreDePas, 3, 4, 5, 6);
int steps = 100;
void setup()
{
Serial.begin(9600);
pinMode (Bouton_poussoir, INPUT); // indique bouton sortit info
moteur.setSpeed(32);
}
void loop() {
etat_Bouton_poussoir = digitalRead(Bouton_poussoir);
Serial.println(etat_Bouton_poussoir);
if ( etat_Bouton_poussoir == 0 ) //
{
moteur.step(steps * -2);
}
else if (etat_Bouton_poussoir == 1 ) {
}
moteur.step(steps);
}
Tu devrais déclarer ton bouton en INPUT_PULLUP ce qui te permet de le connecter entre l'entrée D2 et le GND. Dans ce cas, pas besoin de résistance et un appui t'envoie effectivement 0.
Je ne connais pas la bibliothèque stepper mais es tu sûr qu'on puisse envoyer une valeur négative ?
Aquilae:
maintenant je n’ai toujours pas d’effet au changement, rien de different entre 1 et 0,
#include <Stepper.h>
const int Bouton_poussoir=2; // broche sur laquelle on connecte le bouton // broche sur laquelle on connecte le bouton
unsigned char etat_Bouton_poussoir; // memorise l’etat de la broche bouton
int nbreDePas = 64;
Stepper moteur(nbreDePas, 3, 4, 5, 6);
int steps = 100;
je n'ai pas pu y regarder depuis vos derniers messages, je m'y suis remis cette aprème !
j'avoue que là je ne comprend plus rien je commence a croire que j'ai un soucis de carte et/ou de moteur, n'arrivant a rien (je n'ai pas encore teste le dernier message de dfgh) j'ai décidé de repartir de zéro et recommencer les tuto les plus basique voir là ou je m'étais égaré, allumer une led avec un bouton ok !
faire tourner le moteur bêtement et changer sa vitesse ok !
demander au moteur de tourner dans un sens 10 sec et dans l'autre 10 sec et bien là il tourne dans le sens horaire mais jamais dans le sens inverse et j'ai essayé au moins 7 codes trouvé sur le net sur des sites de tuto basiques ...(j'ai bien vérifier les branchements des pins et dans l'ordre du code ! )
donc là ce n'est pas moi qui merde dans le code ... j'ose espérer qu'ils ne sont pas tous faux ...
quoique je préférerais plutôt qu'il y ai un problème technique !
j'avoue que là je sais plus quoi faire ...
est ce que' l'un d'entre vous pourrez soit écrire soit reprendre un code sur un tuto le tester vérifier qu'il fonctionne, me le montrer et que je teste si ça merde encore c'est que j'ai un pépin mécanique ou électronique ...
je viens de le recup sur le net, mon moteur ne tourne toujours que dans un sens …
alors qu’il est censé inverser …
merci
EDIT : je pose le code sur le post plutôt qu’en lien effectivement …
#include <Stepper.h>
// pour un moteur de 200 pas par tour et brancher sur les broches 2, 3, 4, 5
Stepper moteur(200, 2, 3, 4, 5);
void setup()
{
moteur.setSpeed(30); // 30 tours par minute
// (rappel : ici le moteur fait 200 pas par tour,
// on fera donc 6000 pas par minute)
}
void loop()
{
moteur.step(1000);
delay(1000);
moteur.step(-1000);
delay(2000);
}
Tu aurais du commencer par lire les messages épinglés en haut du forum français : ils disent entre autres de préciser le matériel. Quel est ton Arduino ? Quelle est la référence de ton moteur ? Peux-tu en poster une photo ? Poste ton code ente balises CODE (le bouton </>), ça évitera d’aller le chercher ailleurs… Enfin précise tes branchements.
bonsoir, j'ai bien lu les messages en haut du forum, les photos que j'ai mise au début on voit la carte et le driver moteur et les branchements, donc les photos je les ai postés.
je l'admet je n'ai pas mis la référence du moteur, qui est le 28byj-48 du kit de base.
mes codes dans les diverses post ou il y en avait était avec la balise code donc j'avoue que je ne comprend pas ce message ?
il n'y a que le dernier message ou j'ai fait comme a l'habitude d'un autre site ou il est demandé de mettre le code sur ce site mea culpa...
il aurait peut être été judicieux de lire mes post depuis le début pour voire que je respecte quasi a 100% les exigences du forum a pars 2 étourderies.
si après les débutants motivées qui font des essais sans relâches, des tests, des corrections pour avancer sont traité ainsi sur ce forum alors je vous prie de m'excuser et j'essaierai de trouver un autre forum plus accueillant pour les gens motivés.
merci a ceux qui ont tenté de m'aider bonne continuation.
bidouilleelec:
Je n'ai pas trouvé de doc vraiment clair sur le câblage.
Auriez vous des liens ?
Non pas vraiment, mais les symptômes (arythmie) me disaient "bobines croisées", j'ai trouvé un exemple, je ne sais plus où qui fonctionnait impeccable et j'ai joué au jeu des 7 différences avec l'exemple de @Aquilae, ça a pris un certain temps!!!
Et ça fonctionne, pas très cartésien....