Função de Tempo no Arduíno - Millis/Ações - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-29T12:26:10Zhttps://labdegaragem.com/forum/topics/fun-o-de-tempo-no-ardu-no-millis-a-es?commentId=6223006%3AComment%3A699066&feed=yes&xn_auth=noOlá garagistas, agradeço todo…tag:labdegaragem.com,2019-02-19:6223006:Comment:7010262019-02-19T13:29:36.648ZRafael Brancohttps://labdegaragem.com/profile/RafaelBranco
<p>Olá garagistas, agradeço todo o empenho, no período da noite estarei atualizando tudo o que ocorreu aqui, agora só passei para mostrar que não desapareci haha.</p>
<p></p>
<p>Até logo amigos.!</p>
<p>Olá garagistas, agradeço todo o empenho, no período da noite estarei atualizando tudo o que ocorreu aqui, agora só passei para mostrar que não desapareci haha.</p>
<p></p>
<p>Até logo amigos.!</p> você pode usar essa função no…tag:labdegaragem.com,2019-02-19:6223006:Comment:7011212019-02-19T12:26:33.961ZTiago Alexandrehttps://labdegaragem.com/profile/TiagoAlexandre
<p>você pode usar essa função no código para fazer a contagem no lugar do delay</p>
<p>void hold(const unsigned int &ms) { // função de substituição do delay// Non blocking delay<br/> unsigned long m = millis();<br/> while (millis() - m < ms) {<br/> yield();<br/> }<br/>}</p>
<p>Ai ao invés de "delay(2000);" por exemplo você escreve "hold(2000);"</p>
<p>É muito pratico, te da o conforto do delay e a liberdade do millis rsrs.</p>
<p>você pode usar essa função no código para fazer a contagem no lugar do delay</p>
<p>void hold(const unsigned int &ms) { // função de substituição do delay// Non blocking delay<br/> unsigned long m = millis();<br/> while (millis() - m < ms) {<br/> yield();<br/> }<br/>}</p>
<p>Ai ao invés de "delay(2000);" por exemplo você escreve "hold(2000);"</p>
<p>É muito pratico, te da o conforto do delay e a liberdade do millis rsrs.</p> boa noite Rafael.
Fiz…tag:labdegaragem.com,2019-02-07:6223006:Comment:7000662019-02-07T01:01:12.103ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">boa noite Rafael.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Fiz uma implementação do Sistema que vc descreveu, e todas as funcionalidades que você descreveu aqui no post, estão funcionando exatamente como descrito.</span></p>
<p><span style="font-size: 12pt;"> Porém há alguns pontos que você não passou detalhes, e inclusive chegam a parecer incongruentes em termos de funcionamento.</span></p>
<p><span style="font-size: 12pt;"> Se…</span></p>
<p><span style="font-size: 12pt;">boa noite Rafael.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Fiz uma implementação do Sistema que vc descreveu, e todas as funcionalidades que você descreveu aqui no post, estão funcionando exatamente como descrito.</span></p>
<p><span style="font-size: 12pt;"> Porém há alguns pontos que você não passou detalhes, e inclusive chegam a parecer incongruentes em termos de funcionamento.</span></p>
<p><span style="font-size: 12pt;"> Se possível, entre em contato, pois se você descrever estes detalhes, te passo toda a implementação (código e Hardware), bem como publico a mesma aqui neste tópico, claro se vc concordar (de forma a servir de base para projetos diversos de outros garagistas).</span></p>
<p><span style="font-size: 12pt;"> Também tenho algumas sugestões que podem ajudar na sua implementação, mas somente com a descrição mais detalhada da sua parte, é que posso encaixar estas sugestões.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p>
<p></p> Galera, boa noite!
Após algu…tag:labdegaragem.com,2019-02-06:6223006:Comment:6999812019-02-06T23:35:49.666ZRafael Brancohttps://labdegaragem.com/profile/RafaelBranco
<p>Galera, boa noite!</p>
<p></p>
<p>Após alguns dias longe do Arduino, fiz uma implementação de uma função de timer, bem primitiva na verdade, que me atendeu em boa parte:</p>
<p>unsigned long startMillis0;<br></br>unsigned long currentMillis0;<br></br>unsigned long periodo0;<br></br>bool tempofoi0 = false;</p>
<p>void tempo0()<br></br>{<br></br> currentMillis0 = millis(); //Obtém o "tempo" atual (o número de milissegundos desde que o programa iniciou)<br></br> if (currentMillis0 - startMillis0 >= periodo0)…</p>
<p>Galera, boa noite!</p>
<p></p>
<p>Após alguns dias longe do Arduino, fiz uma implementação de uma função de timer, bem primitiva na verdade, que me atendeu em boa parte:</p>
<p>unsigned long startMillis0;<br/>unsigned long currentMillis0;<br/>unsigned long periodo0;<br/>bool tempofoi0 = false;</p>
<p>void tempo0()<br/>{<br/> currentMillis0 = millis(); //Obtém o "tempo" atual (o número de milissegundos desde que o programa iniciou)<br/> if (currentMillis0 - startMillis0 >= periodo0) //Verifica se o período passou<br/> {<br/> tempofoi0 = true; //Se período atingiu, sinaliza na variável<br/> startMillis0 = currentMillis0; //IMPORTANTE para salvar o tempo em que sinalizou na variável<br/> }<br/>}</p>
<p></p>
<p>Controlando as variáveis, consegui fazer o delay sem 'bloquear' o processador.</p>
<p>Acontece que estou fazendo um dimmer com função 0 crossing, e para funcionar, utilizo uma interrupção, mas dentro da função na qual a interrupção chama, só consegui usar a função "delayMicroseconds". Isto está causando problemas quando tento fazer uma 'rampa de aceleração', controlando a delay. Segue o código básico do 0 cross:</p>
<p></p>
<p>const int setmoc = 4;<br/>int PotPin = A2;<br/>volatile float AnalogValue = 0;<br/>volatile float Delay = 0;</p>
<p>void setup() {<br/> Serial.begin(9600);<br/> pinMode(setmoc, OUTPUT);<br/> attachInterrupt(0, Dimm, RISING);<br/>}</p>
<p>void loop() {<br/> AnalogValue = analogRead(PotPin);<br/> Delay = ((AnalogValue * 7.03)+360);<br/> Serial.print(Delay);<br/> Serial.print("\n");<br/>}</p>
<p>void Dimm() {<br/> delayMicroseconds(Delay);<br/> digitalWrite(setmoc, HIGH);<br/> delayMicroseconds(6);<br/> digitalWrite(setmoc, LOW);<br/>}</p>
<p></p>
<p>A questão é: seria possível fazer o delay dentro da função chamada pela interrupção sem utilizar a função delay do Arduino?</p>
<p></p>
<p>Agradeço desde já a atenção de todos.</p> Eu tive um problema semelhant…tag:labdegaragem.com,2019-01-29:6223006:Comment:6993812019-01-29T20:45:55.075ZFábio Soares Pireshttps://labdegaragem.com/profile/FabioSoaresPires
<p>Eu tive um problema semelhante e resolvi com as informações do site</p>
<p><a rel="nofollow noopener" href="https://www.luisllamas.es/libreria-arduino-asynctask/" target="_blank">https://www.luisllamas.es/libreria-arduino-asynctask/</a></p>
<p>Espero que ajude.</p>
<p>Eu tive um problema semelhante e resolvi com as informações do site</p>
<p><a rel="nofollow noopener" href="https://www.luisllamas.es/libreria-arduino-asynctask/" target="_blank">https://www.luisllamas.es/libreria-arduino-asynctask/</a></p>
<p>Espero que ajude.</p> Eduardo, agradeço muito a res…tag:labdegaragem.com,2019-01-27:6223006:Comment:6990692019-01-27T22:49:22.848ZRafael Brancohttps://labdegaragem.com/profile/RafaelBranco
<p>Eduardo, agradeço muito a resposta rápida, irei testar amanhã e estarei postando os resultados por aqui. Muito obrigado!</p>
<p>Eduardo, agradeço muito a resposta rápida, irei testar amanhã e estarei postando os resultados por aqui. Muito obrigado!</p> RV, Obrigado!
Testarei amanhã…tag:labdegaragem.com,2019-01-27:6223006:Comment:6991762019-01-27T22:48:51.951ZRafael Brancohttps://labdegaragem.com/profile/RafaelBranco
<p>RV, Obrigado!</p>
<p>Testarei amanhã, isso está quebrando minha cabeça.</p>
<p>Essas variáveis serão parametrizadas por botões e um display. Vou fazer um menu onde inputo o tempo e esse funciona como "rampa de subida e rampa de descida".</p>
<p>Estarei postando os resultados assim que testar!</p>
<p></p>
<p>RB</p>
<p>RV, Obrigado!</p>
<p>Testarei amanhã, isso está quebrando minha cabeça.</p>
<p>Essas variáveis serão parametrizadas por botões e um display. Vou fazer um menu onde inputo o tempo e esse funciona como "rampa de subida e rampa de descida".</p>
<p>Estarei postando os resultados assim que testar!</p>
<p></p>
<p>RB</p> Olá.
Eu usaria interrupção.…tag:labdegaragem.com,2019-01-27:6223006:Comment:6990662019-01-27T21:21:18.361ZEduardohttps://labdegaragem.com/profile/EduardoHenriqueMarcondes
<p>Olá.</p>
<p> Eu usaria interrupção... Apenas uma.</p>
<p>Veja em:</p>
<p><a href="http://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-em-intervalos-de-tempo-fixos-timers" target="_blank">http://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-em-intervalos-de-tempo-fixos-timers</a></p>
<p> No exemplo está para meio segundo. Pode ser por ex 0,1 segundo.</p>
<p> Aih vc pode criar contadores de tempo. </p>
<p> Incrementa esses contadores a cada ida ao…</p>
<p>Olá.</p>
<p> Eu usaria interrupção... Apenas uma.</p>
<p>Veja em:</p>
<p><a href="http://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-em-intervalos-de-tempo-fixos-timers" target="_blank">http://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-em-intervalos-de-tempo-fixos-timers</a></p>
<p> No exemplo está para meio segundo. Pode ser por ex 0,1 segundo.</p>
<p> Aih vc pode criar contadores de tempo. </p>
<p> Incrementa esses contadores a cada ida ao callback()</p>
<p>Logo depois de incrementar vc verifica se chegou ao limite da contagem para aquele contador, que pode ser por ex de botao pressionado, nivel de porta, tempo de led, o que quiser, faca sua logica.</p>
<p>Apenas nunca faça coisas demoradas em uma interrupçao como delay(), escrita em serial de mais de 1 caracterer, escrita em LCD, coisas assim. Se precisar em vez de fazer vc pode setar uma variavel avisando da necessidade e la no programa principal (loop()) vc verifica essa flag e executa (depois reseta a flag).</p>
<p>Acho o melhor jeito de trabalhar com varios timers.</p>
<p></p> Boa tarde RB,
voce descreveu…tag:labdegaragem.com,2019-01-27:6223006:Comment:6993532019-01-27T21:20:15.023Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Boa tarde RB,</p>
<p>voce descreveu no seu texto: "<span>variável setável individualmente para cada temporizador."</span></p>
<p><span>Como você "setará" estas variáveis?</span></p>
<p></p>
<p><span>O resto é relativamente fácil.</span></p>
<p>Você<span> pode usar millis(), ou a biblioteca timerOne.h ou a elapsedMillis.h.</span></p>
<p><span>Com millis() faça assim:</span></p>
<p><span>1. No setup() carregue 3 variáveis com o valor de millis();</span></p>
<p><span>2. Com os botões sem…</span></p>
<p>Boa tarde RB,</p>
<p>voce descreveu no seu texto: "<span>variável setável individualmente para cada temporizador."</span></p>
<p><span>Como você "setará" estas variáveis?</span></p>
<p></p>
<p><span>O resto é relativamente fácil.</span></p>
<p>Você<span> pode usar millis(), ou a biblioteca timerOne.h ou a elapsedMillis.h.</span></p>
<p><span>Com millis() faça assim:</span></p>
<p><span>1. No setup() carregue 3 variáveis com o valor de millis();</span></p>
<p><span>2. Com os botões sem pressionar, cada variável fica sendo atualizada com valor de millis();</span></p>
<p><span>3. Ao pressionar algum botão, inicia a comparação da variável com o valor "setado" para aquele botão.</span></p>
<p>4. Se "estourar" o tempo, executa a ação planejada para aquele botão.</p>
<p>RV</p>