Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2017-07-01T14:53:39+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Eclairage Leds par Arduino pour diorama, message #1550042017-07-01T14:53:39+02:00Ardakaniz/@Ardakanizhttps://zestedesavoir.com/forums/sujet/8879/eclairage-leds-par-arduino-pour-diorama/?page=1#p155004<p>Un exemple de comment tu pourrais faire sans avoir à acheter une Arduino pour chaque mode (ce qui est pas très économique on va dire) serait de virer le delay et le <code>digitalWrite(pinLed, LOW)</code> dans chaque cas, mais à la place de mettre l’équivalent de ma variable <code>time</code> dans l’exemple à la valeur de millis, puis vérifier l’interval.</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="kr">int</span> <span class="n">mode1_starttime</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="kr">void</span> <span class="nf">translateIR</span><span class="p">()</span> <span class="p">{</span>
<span class="k">switch</span> <span class="p">(</span><span class="n">results</span><span class="p">.</span><span class="n">value</span><span class="p">)</span> <span class="p">{</span>
<span class="k">case</span> <span class="mh">0xFF30CF</span><span class="o">:</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"Mode: 1"</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span> <span class="kr">HIGH</span><span class="p">);</span> <span class="c1">// Active la LED</span>
<span class="n">mode1_starttime</span> <span class="o">=</span> <span class="nf">millis</span><span class="p">();</span> <span class="c1">// </span>
<span class="k">break</span><span class="p">;</span>
<span class="c1">// [...]</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kr">void</span> <span class="nf">disable_modes</span><span class="p">()</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mode1_starttime</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="p">(</span><span class="nf">millis</span><span class="p">()</span> <span class="o">-</span> <span class="n">mode1_starttime</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1000</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Va tester la première condition avant</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span> <span class="kr">LOW</span><span class="p">);</span>
<span class="n">mode1_starttime</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="c1">// Evite d'avoir un boolean en plus pour dire si le mode a été activé ou pas : -1 = désactivé, quand une valeur de millis (>= 0) = activé </span>
<span class="p">}</span>
<span class="c1">// [...]</span>
<span class="p">}</span>
</pre></div>
</td></tr></table></div>
<p>ça reste un code "assez" simple tout en évitant d’avoir à acheter de nombreuses cartes, le seul inconvénient c’est que ça peux vite finir long, donc l’utilisation de tableaux pourrais généraliser tout ça. <br>
Si jamais tu veux que quand un mode est activé, tu veux désactiver les autres, tu as juste à modifier la condition de <code>disable_modes</code> pour que quand <code>modeX_starttime</code> vaille -1, ça désactive, ou -2 pour éviter de boucle et d’éxécuter des <code>digitalWrite</code> inutiles</p>Eclairage Leds par Arduino pour diorama, message #1549932017-07-01T10:10:20+02:00thunderman/@thundermanhttps://zestedesavoir.com/forums/sujet/8879/eclairage-leds-par-arduino-pour-diorama/?page=1#p154993<p>Yop</p>
<p>J’ai refait un essai avec millis, ca retourne bien a la detection infrarouge, mais le bout de code dans les "case" ne se font qu’une seule fois, et je fais un boucle dedans, je peux pas en sortir…</p>
<p>Il faudrait alors que je puisse stocker la valeur de la commande infrarouge, pour la faire repeter et la changer si une nouvelle revient… </p>
<p>Le switch ne devrait aps se faire sur la valeur de la telecommande, mais sur une valeur qui reste en memoire (la valeur de la telecomande change une fois le "case" fait</p>
<p>Pas simple…</p>Eclairage Leds par Arduino pour diorama, message #1549912017-07-01T08:47:59+02:00iznobe/@iznobehttps://zestedesavoir.com/forums/sujet/8879/eclairage-leds-par-arduino-pour-diorama/?page=1#p154991<p>SAlut , si tu penses que faire communiquer plusieurs cartes , envoyer et recevoir des données , puis gerer la fonction de commande sur une autre carte qui doit tout analyser recevoir et renvoyer les infos aux autres est plus simple que de changer juste une fonction de ton code , ben je t ’ assure que tu te trompes graaaaavvvve !!!!</p>
<p>Ardakaniz t ’ as donné la solution sur un plateau …</p>
<p>la fonction delay() stoppe completement le prog d ’ ou ton pb .
la fonction millis() declenche un timer en gros qui stoppe rien du tout , ce qui resout donc ton pb .
il ne reste plus qu ’ a adapter ton code et remercier Ardakaniz pour t ’ avoir donner la solution .</p>
<p>PS : delay() est une fonction ; delay=xxxxxx est une variable ; ca n ’ a plus rien a voir .</p>Eclairage Leds par Arduino pour diorama, message #1549872017-07-01T05:31:34+02:00thunderman/@thundermanhttps://zestedesavoir.com/forums/sujet/8879/eclairage-leds-par-arduino-pour-diorama/?page=1#p154987<p>En fait, j’y ai réfléchi toute la nuit (la nuit porte conseil comme on dit ^^)</p>
<p>Et je n’ai pas trouvé de solution pour faire lire a tout moment le code ir reçu…</p>
<p>Du coup, ayant trouvé des clones de Nano pour moins de 2€, je pensais en prendre plusieurs, en utiliser un par fonction (éclairages, réverbères, feux…) et les commander via un dernier qui reçoit les code IR.</p>
<p>Ce serait moins simple a caser, mais plus simple a programmer non ?
En bricolant un grand hub usb, et calant un relais sur chaque port, et le Nano master commande ces relais. Nano esclave allumée, programme lancée… et inversement.</p>
<p>Non, y’a plus simple ?</p>Eclairage Leds par Arduino pour diorama, message #1549532017-06-30T18:28:50+02:00Ardakaniz/@Ardakanizhttps://zestedesavoir.com/forums/sujet/8879/eclairage-leds-par-arduino-pour-diorama/?page=1#p154953<p>Salut !</p>
<p>Alors oui, c’est bien la fonction <code>millis()</code> qu’il faudra utiliser dans ton cas.<br>
Cette fonction renvoie le nombre de millisecondes depuis le lancement de ton programme sur la carte, donc pour avoir le nombre de millisecondes écoulés depuis un temps t, tu enregistre juste ce temps dans une variable puis au moment t+1, tu fais la soustraction pour connaitre l’intervalle.</p>
<p>En code ça donne:</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="kt">int</span> <span class="n">time</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">delay</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">void</span> <span class="nf">loop</span><span class="p">()</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">digitalRead</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">==</span> <span class="n">HIGH</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Par exemple si appuie d'un bouton</span>
<span class="n">time</span> <span class="o">=</span> <span class="n">millis</span><span class="p">();</span> <span class="c1">// On stocke le temps qu'il s'est écoulé depuis le début</span>
<span class="n">digitalWrite</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">HIGH</span><span class="p">);</span> <span class="c1">// On allume la led</span>
<span class="p">}</span>
<span class="n">delay</span> <span class="o">=</span> <span class="n">millis</span><span class="p">()</span> <span class="o">-</span> <span class="n">time</span><span class="p">;</span> <span class="c1">// On soustrait le temps présent à l'ancien temps pour avoir l'intervalle entre l'appuie du bouton et "maintenant"</span>
<span class="k">if</span> <span class="p">(</span><span class="n">delay</span> <span class="o">></span> <span class="mi">1000</span><span class="p">)</span>
<span class="n">digitalWrite</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">);</span> <span class="c1">// On l'éteint au bout d'1 seconde</span>
<span class="p">}</span>
</pre></div>
</td></tr></table></div>
<p>Après je te laisse adapter pour l’utiliser dans ton code <img alt=";)" src="/static/smileys/clin.png"></p>Eclairage Leds par Arduino pour diorama, message #1549462017-06-30T16:25:21+02:00thunderman/@thundermanhttps://zestedesavoir.com/forums/sujet/8879/eclairage-leds-par-arduino-pour-diorama/?page=1#p154946<p>Hello hello</p>
<p>Je débute tout juste sur une arduino uno R3 (je l’ai reçu hier…) et je bute sur un programme.</p>
<p>Je souhaite faire un éclairage évolutif sur un diorama, piloté pas un Arduino (uno pour commencé, mais surement nano par la suite) et télécommandé (pour changer de mode)</p>
<p>Mais je bute sur un soucis. voila mon code (mélange de code repris un peu partout)</p>
<div><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="cm">/* YourDuino.com Example Software Sketch</span>
<span class="cm"> IR Remote Kit Test</span>
<span class="cm"> Uses YourDuino.com IR Infrared Remote Control Kit 2</span>
<span class="cm"> http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153</span>
<span class="cm"> based on code by Ken Shirriff - http://arcfn.com</span>
<span class="cm"> Get Library at: https://github.com/shirriff/Arduino-IRremote</span>
<span class="cm"> Unzip folder into Libraries. RENAME folder IRremote</span>
<span class="cm"> terry@yourduino.com */</span>
<span class="cm">/*-----( Import needed libraries )-----*/</span>
<span class="cp">#include</span> <span class="cpf">"IRremote.h"</span><span class="cp"></span>
<span class="cm">/*-----( Declare Constants )-----*/</span>
<span class="kr">int</span> <span class="n">receiver</span> <span class="o">=</span> <span class="mi">11</span><span class="p">;</span> <span class="c1">// pin 1 of IR receiver to Arduino digital pin 11</span>
<span class="kr">int</span> <span class="n">pinLed</span><span class="o">=</span><span class="mi">3</span><span class="p">;</span> <span class="c1">// pin de la led de test</span>
<span class="cm">/*-----( Declare objects )-----*/</span>
<span class="n">IRrecv</span> <span class="nf">irrecv</span><span class="p">(</span><span class="n">receiver</span><span class="p">);</span> <span class="c1">// create instance of 'irrecv'</span>
<span class="n">decode_results</span> <span class="n">results</span><span class="p">;</span> <span class="c1">// create instance of 'decode_results'</span>
<span class="cm">/*-----( Declare Variables )-----*/</span>
<span class="kr">void</span> <span class="nb">setup</span><span class="p">()</span> <span class="cm">/*----( SETUP: RUNS ONCE )----*/</span>
<span class="p">{</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">begin</span><span class="p">(</span><span class="mi">9600</span><span class="p">);</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">"IR Receiver Raw Data + Button Decode Test"</span><span class="p">);</span>
<span class="n">irrecv</span><span class="p">.</span><span class="n">enableIRIn</span><span class="p">();</span> <span class="c1">// Start the receiver</span>
<span class="nf">pinMode</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">OUTPUT</span><span class="p">);</span> <span class="c1">// led en sortie de courant</span>
<span class="p">}</span><span class="cm">/*--(end setup )---*/</span>
<span class="kr">void</span> <span class="nb">loop</span><span class="p">()</span> <span class="cm">/*----( LOOP: RUNS CONSTANTLY )----*/</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">irrecv</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="o">&</span><span class="n">results</span><span class="p">))</span> <span class="c1">// have we received an IR signal?</span>
<span class="p">{</span>
<span class="c1">// Serial.println(results.value, HEX); UN Comment to see raw values</span>
<span class="n">translateIR</span><span class="p">();</span>
<span class="n">irrecv</span><span class="p">.</span><span class="n">resume</span><span class="p">();</span> <span class="c1">// receive the next value</span>
<span class="p">}</span>
<span class="p">}</span><span class="cm">/* --(end main loop )-- */</span>
<span class="cm">/*-----( Declare User-written Functions )-----*/</span>
<span class="kr">void</span> <span class="nf">translateIR</span><span class="p">()</span> <span class="c1">// takes action based on IR code received</span>
<span class="c1">// describing Car MP3 IR codes </span>
<span class="p">{</span>
<span class="k">switch</span><span class="p">(</span><span class="n">results</span><span class="p">.</span><span class="n">value</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">case</span> <span class="mh">0xFF30CF</span><span class="o">:</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">" 1 "</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">HIGH</span><span class="p">);</span> <span class="c1">// on passe le pin à +5V</span>
<span class="nf">delay</span> <span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">LOW</span><span class="p">);</span> <span class="c1">// on passe le pin à 0V</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="mh">0xFF18E7</span><span class="o">:</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">" 2 "</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">HIGH</span><span class="p">);</span> <span class="c1">// on passe le pin à +5V</span>
<span class="nf">delay</span> <span class="p">(</span><span class="mi">2000</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">LOW</span><span class="p">);</span> <span class="c1">// on passe le pin à 0V</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">case</span> <span class="mh">0xFF7A85</span><span class="o">:</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">" 3 "</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">HIGH</span><span class="p">);</span> <span class="c1">// on passe le pin à +5V</span>
<span class="nf">delay</span> <span class="p">(</span><span class="mi">3000</span><span class="p">);</span>
<span class="nf">digitalWrite</span><span class="p">(</span><span class="n">pinLed</span><span class="p">,</span><span class="kr">LOW</span><span class="p">);</span> <span class="c1">// on passe le pin à 0V</span>
<span class="k">break</span><span class="p">;</span>
<span class="k">default</span><span class="o">:</span>
<span class="nf">Serial</span><span class="p">.</span><span class="nf">println</span><span class="p">(</span><span class="s">" other button "</span><span class="p">);</span>
<span class="p">}</span>
<span class="nf">delay</span><span class="p">(</span><span class="mi">500</span><span class="p">);</span>
<span class="p">}</span> <span class="c1">//END translateIR</span>
<span class="cm">/* ( THE END ) */</span>
</pre></div>
</td></tr></table></div>
<p>La c’est un test avec une led qui s’allume en fonction du bouton utilisé, pour faire un code plus complexe par la suite. Le code n’est pas forcement complet, j’ai enlevé les boutons qui ne servent a rien.</p>
<p>En gros, chaque cas aura un bout de code, plus ou moins complexe suivant le cas, et n’utilisera pas forcement les mêmes pins de l’arduino.
Pour gérer par exemple, les réverbères, l’éclairage des maisons, les feux tricolores, une barrière électrique…</p>
<p>Seulement j’aimerais pouvoir changer de mode (par un appuie sur la télécommande) en cours de mode.
Si j’appuie sur 3, je suis obligé d’attendre que le code se fasse, et ensuite d’attendre que l’arduino attende que j’appuie, pour que l’appuie se fasse détecté. (je sais pas si je suis clair ^^).</p>
<p>Ce que je voudrais, c’est passer du cas 3 au cas 2, sans avoir besoin d’attendre que le code du cas 3 soit fini en entier…</p>
<p>La fonction delay() ne me semble pas approprié, et je pensais utiliser millis(), mais j’ai pas trop compris comment ça fonctionnait…</p>
<p>y’a aussi surement moyen, d’optimiser le tout, mais c’est pas d’actualité pour le moment… déjà faire en sorte que ça marche <img alt="^^" src="/static/smileys/hihi.png"></p>
<p>merci d’avance pour vos précieux conseils…</p>