Je suis nouveau ici et tout jeune sur Arduino et je rencontre des difficultés à rédiger mon code.
Il s'agit d'un petit volet motorisé grâce a un moteur pas a pas.
Il y a également un fin de course "Ouvert" broche "6" et un fin de course "Fermé" broche "7"
Enfin l'ordre d'ouverture et fermeture et interprété par la présence ou non du 5v sur l'une des broche "8".
Je souhaite que lorsque le 5v apparait sur la broche 8, que le moteur se mette a tourner jusqu'à ce que l'on appui sur le fin de course ouvert.
Puis dés que la tension sur la broche "8" retombe a zéro, alors on fait tourner le moteur dans l'autre sens jusqu'au fin de course bas.
fin du cycle
Voici le code que j'ai rédigé en pompant différents élément à droite et a gauche.
Mais la je n'ai aucune réaction du moteur et je ne sais plus comment faire.
D'abord, édite ton message pour mettre le code entre balises CODE : ça doit ressembler à la réponse de AWOL.
Ensuite, ce qu'il te dit c'est qu'il ne faut pas de ; après la condition du while, sinon tu as une boucle sans fin.
Mais ce n'est qu'une partie de ton problème : il faut que tu mettes à jour la valeur de la variable testée dans la condition du while, sinon, ce sera encore une boucle sans fin :
Pour éditer, tu vas en bas du message, et à droite tu vois "Quick edit More". Tu cliques sur More puis Modify et tu arrives dans une fenêtre d'édition.
Là, tu sélectionnes ton code et tu cliques sur le bouton </> qui va mettre les balises.
Pour la mise à jour, c'est les lignes de code que je t'ai données.
Si je comprends bien : la pin 8 peut être à un niveau bas ou un niveau haut.
Si niveau haut, tu montes le rideau jusqu'à ce que le fin de course 'ouvert' envoie un signal.
Si niveau bas, tu descends le rideau jusqu'à ce que le fin de course 'fermé' envoie un signal.
Moi, je ferais le code de manière un peu différente, avec une variable qui conserve l'état du volet : monte, descend, arret.
En pseudo code, ça donnerait quelque chose comme ça (une sorte de machine d'état) :
Lire la pin Start
Si niveau haut:
Si le volet descend : mettre l'état du volet à 'monte'
Si l'état du volet est 'monte' : lire le fin de course 'ouvert'. S'il indique que le volet est arrivé, mettre l'état du volet à 'arret'- Si niveau bas:
Si le volet monte : mettre l'état du volet à 'descend'
Si l'état du volet est 'descend' : lire le fin de course 'fermé'. S'il indique que le volet est arrivé, mettre l'état du volet à 'arret'- Commander le moteur selon l'état du volet (dans un sens si 'monte', dans l'autre si 'descend', arrêté si 'arret')
Pourquoi pas, mais comment je stop un moteur pas a pas ?
Je sais lui dire de parcourir un certain nombre de pas
Je sais le faire avancer de pas en pas
Mais je ne sais pas lui dire, tourne indéfiniment et arrête toit quand ...
Sans vouloir abuser, accepterais tu de m'écrire le code ?
Je dois trouver rapidement la solution et ca fait déjà un moment que je tourne en rond autour du sujet.
Dans ton cas, il y a donc 3 états (cf. ci-dessus) et il a aussi 4 événements :
appui sur le bouton Start,
lâcher du bouton Start,
fin de course haute atteinte,
fin de course basse atteinte.
Donc, tu dessines 3 patates (les 3 états). De chaque états doivent partir 4 flèches : les 4 événements.
Le flèche mène vers le nouvel état, celui que la détection de l'événement impose.
Voici ton cas (si j'ai bien compris, pas bien sûr, à vérifier flèche par flèche !) :
Je n'ai pas écrit les actions coirespondantes : quand on passe de ARRET à MONTEE, il faut commander le moteur, de MONTEE à DESCENTE il faut commander le moteur...
Il n'y a plus qu'à coder maintenant, le plus dur est fait
On en reparle si as des difficultés, après avoir digéré tout ça.
[Edit] j'avais pas vu que tu jetais lâchement l'éponge. J'ai passé 1h ... pffff ....
Merci pour ces explications et pour ton temps Biggil,
J'ai un diplôme en Maintenance des systèmes mécaniques et automatisés, un autre en génie Mécanique et un autre en génie Electronique, ...
Je sais programmer un automate et le GRAFCET tu pense bien que je connais.
Donc la rédaction d'une machine à état, n'est pas une difficulté ni à l'écriture ni a la compréhension pour moi bien au contraire.
D'ailleurs, c'est la première chose que j'ai faite avant de commencer à programmer cette petite carte.
Le problème que j'ai, c'est je ne sais pas toujours traduire mon idée en langage Arduino.
Car d'une part il faut du temps de l'expérience et de la pratique pour découvrir les subtilités de ce langage,
mais aussi parce que la manière dont ca a été créer n'est pas toujours logique et donc on ne peut pas traduire littéralement ou même physiquement notre façon de penser en Arduino ou en C++.
Et le déroulé du programme n'a rien avoir avec une formule Excel ou un GRAFCET.
J'ai pourtant pris le temps de tester fonction après fonction, histoire de maitriser leur fonctionnement.
Mais il arrive souvent, qu'en agissant sur une variable ou même une virgule que plus rien ne fonctionne.
Et on a vite fait d'oublier une virgule
Bref, ce n'est pas de la mauvaise volonté de ma part, mais il n'y à pas asse d'exemple autour du sujet moteur pas a pas, qui correspond a ce que je recherche ainsi qu'au composant que j'utilise.
J'aurais besoins de quelqu'un à côté de moi pour intervenir ponctuellement et m'expliquer le pourquoi du comment.
Donc la rédaction d'une machine à état, n'est pas une difficulté ni à l'écriture ni a la compréhension pour moi bien au contraire.
D'ailleurs, c'est la première chose que j'ai faite avant de commencer à programmer cette petite carte
Le problème que j'ai, c'est je ne sais pas toujours traduire mon idée en langage Arduino.
le tutoriel de J-M-L signalé par biggil en #14 indique de manière détaillée une méthode de codage Arduino d'un quasi GRAFCET... codage des états , des transitions....
Si tu as un problème avec le moteur, commence par faire un petit code dédié pour trouver les niveaux à mettre sur les différentes pins pour le faire avancer, reculer et stopper.
Juste quelques lignes, inspirées des exemples que tu peux trouver sur le site d'eskimon.