Voilà, j'essaie de faire une lampe façon Stark pour mon fils.
Un cube, une petite trape, un jeu de led.
Seulement quatres actions :
1et 2 : Ouvrir la trape - Alumer les leds
3 et 4 : Éteindre les leds - Fermer la trape.
J'ai testé deux modèles simples de code proposés par Arduino. Le Knob et le Analog In, Out Serial où j'ai remplacé le potar par deux boutons. (j'aimerais d'ailleurs n'en utiliser qu'un seul mais ça, je vais essayer de trouver la solution avant de vous embêter plus...)
J'ai essayé d'intégrer le second au premier en suprimant le "Blinking" forcément (sinon le gamin au lieu de dormir il se croira en boîte de nuit...^_^)
Tout ce que j'obtiens c'est soit la led reste alumée, soit elle reste éteinte.
Il est clair que je m'y suis mal pris.
Ben en fait tes explications ne sont pas très claires sur l'enchaînement des opérations. C'est peut être pour ça que ton programme ne fonctionne pas comme souhaité.
Donc moi ce que je te suggère c'est de commencer avec un papier et un crayon
Donc tu décris dans quel état doit se trouver ton appareil à la mise sous tension.
Position des servos
Etat des LED
Tous ça finira dans le setup() de ton programme.
L'état par défaut étant fixé on passe à la boucle principale (ne pas oublier que loop() s'exécute en boucle).
est-ce que tu attends une action ou est-ce que le système démarre de lui-même?
suite à telle ou telle action que font les servos et les LEDs.
Et ainsi de suite pour toutes les fonctions de ton appareil
Très important quand c'est écrit sur le papier, "dérouler le programme" à la main pour voir si l'enchaînement est bon et le fonctionnement comme attendu dans tous les cas.
Quand ce sera bien clair sur le papier, ce sera bien clair dans la tête et le code viendra plus facilement.
Et là on pourra t'aider efficacement.
Merci pour ta réponse.
Bin... sur le papier ça donne ce que j'ai mis plus haut.
Mais je peux bien détailler plus...
À l'alumage, l'état est : trape fermée, Leds éteints.
J'appuie sur le bouton "On", la trape s'ouvre et les Leds s'alument.
Enfin, quand j'ai plus besoin de la lampe, j'appuie sur le bouton "Off" alors les Leds s'éteignent et la trape se referme.
Question connection :
J'ai un servomoteur connecté à l'Arduino. 5V, Gnd, Pin8 et Pin 9. Pour ces deux derniers, j'ai mis deux boutons push reliés en "Y" au servomoteur. (Je n'arrivais pas à obtenir deux actions avec un seul bouton - du moins un seul "if-else" pour en arriver à un Push-Pull.)
Un jeu de Leds (pour l'instant une seule pour aller vite) connecté en Pin13 et (juste au dessus) en ground.
Je n'obtiens que le résultat voulu pour le servo moteur. Mais rien sur les Leds. Sauf "tout éteint" ou "tout alumé".
Donc tu décris dans quel état doit se trouver ton appareil à la mise sous tension.
Position des servos
Etat des LED
Tous ça finira dans le setup() de ton programme.
En effet, je n'ai pas pensé à l'état de base...
je tiens à rappeler que je m'y connais très peux.
IJKA:
Mais je peux bien détailler plus...
À l'alumage, l'état est : trape fermée, Leds éteints.
J'appuie sur le bouton "On", la trape s'ouvre et les Leds s'alument.
Enfin, quand j'ai plus besoin de la lampe, j'appuie sur le bouton "Off" alors les Leds s'éteignent et la trape se referme.
Lorsqu'on regarde le fonctionnement que tu as décrit, il y a des boutons.
Ceux-ci n'apparaissent à aucun moment dans ton programme donc il n'est pas très étonnant que rien ne se passe lorsque tu appuies sur tes boutons.
Je voudrait te faire remarquer aussi que ce que tu décris c'est ce que tu fais pas ce que le programme fait lui même.
La description de ce que fait le programme serait (je ne traite que la boucle principale):
je lis l'état du bouton
si le bouton ON est appuyé
j'ouvre la trappe
j'allume le LED
si le bouton OFF est appuyé
j'éteins la LED
je ferme la trappe
for(pos1 = 0; pos1 < 90; pos1 = 90)
Je te propose de regarder là ==> la syntaxe du for. Tu t'apercevras que le 3ème argument n'est pas correct. Il devrait y avoir une opération qui modifie l'index de la boucle, comme pos1++ (pour incrémenter) ou pos1-- (pour décrémenter)
Je suppose que si tu as utilisé une boucle c'est parce que tu voulais une ouverture progressive de la trappe. Il faudrait donc placer un délai dans la boucle sinon celle-ci s'exécute très vite et la trappe s'ouvre d'un seul coup.
IJKA:
...je tiens à rappeler que je m'y connais très peux.
Merci.
Ce sont justement des indications du genre que je cherchais.
Pas que le programme me soit tout craché. Je veux plutôt comprendre pour pouvoir me débrouiller seul par la suite.
Pour la syntaxe de For, je pensais déjà avoir mal interprété entre " ++ " le délais dans la boucle. Ce que j'obtenais, c'était une répétition en boucle des deux états l'un après l'autre.
N'ayant pas trouvé d'autre solution, j'ai retiré l'incrémentation et la répétition.
Pour les boutons, en effet, je ne les ai inclus que sous fore de "coupe circuit". Je devrais peut-être les inclure en tant qu'une "action" ou même remettre un potard à la place des boutons.
Cela m'éviterait d'utiliser le "For".
J'ai peut-être pensé tout ça par le mauvais bout.
Je vais reprendre l'ensemble...
Le pseudo-code que j'ai donnée au-dessus correspond à ce que tu veux faire si j'ai bien compris. Il te suffit de le transcrire en "bon" C et tu auras ce que tu veux.