Somar tempo com função millis - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-28T17:40:36Zhttps://labdegaragem.com/forum/topics/somar-tempo-com-fun-o-millis?feed=yes&xn_auth=noBoa tarde.Dando um feedback.C…tag:labdegaragem.com,2019-04-15:6223006:Comment:7057842019-04-15T16:17:51.318ZRodrigo Otavio C. Borgeshttps://labdegaragem.com/profile/RodrigoOtavioCBorges
<p><span>Boa tarde.</span><br/><br/><span>Dando um feedback.</span><br/><br/><span>Consegui meu intento através da referência abaixo:</span><br/><br/><a href="https://youtu.be/9gG_Vc2g6X8" class="bbc_link" target="_blank" rel="noopener">https://youtu.be/9gG_Vc2g6X8</a><br/><br/><span>Obrigado a todos.</span></p>
<p><span>Boa tarde.</span><br/><br/><span>Dando um feedback.</span><br/><br/><span>Consegui meu intento através da referência abaixo:</span><br/><br/><a href="https://youtu.be/9gG_Vc2g6X8" class="bbc_link" target="_blank" rel="noopener">https://youtu.be/9gG_Vc2g6X8</a><br/><br/><span>Obrigado a todos.</span></p> Escrevi o código assim:
unsig…tag:labdegaragem.com,2019-04-12:6223006:Comment:7053892019-04-12T18:17:40.058ZRodrigo Otavio C. Borgeshttps://labdegaragem.com/profile/RodrigoOtavioCBorges
<p><span>Escrevi o código assim:</span></p>
<p><span>unsigned long previous_millis = 0;<br></br>const long interval = 2000;<br></br><br></br><br></br>void loop() {<br></br><br></br> if (condition1){<br></br> <br></br> unsigned long current_millis = millis();<br></br> if (current_millis - previous_millis > interval){<br></br> previous_millis = current_millis; <br></br> <br></br> if (condition2){<br></br><br></br> unsigned long current_millis =…</span></p>
<p><span>Escrevi o código assim:</span></p>
<p><span>unsigned long previous_millis = 0;<br/>const long interval = 2000;<br/><br/><br/>void loop() {<br/><br/> if (condition1){<br/> <br/> unsigned long current_millis = millis();<br/> if (current_millis - previous_millis > interval){<br/> previous_millis = current_millis; <br/> <br/> if (condition2){<br/><br/> unsigned long current_millis = millis();<br/> if (current_millis - previous_millis > interval){<br/> previous_millis = current_millis; <br/> <br/> if (condition3){<br/><br/> <br/> lcd.clear();<br/> lcd.setCursor(0, 1);<br/> lcd.print("tempo: ");<br/> unsigned long tempo = millis();<br/> lcd.println(tempo/1000);<br/> <br/><br/> }<br/> }<br/> }<br/> }<br/> }<br/><br/>}</span></p>
<p></p>
<p><span>Como const long interval = 2000 e após satisfeita as condições 1, 2 e 3 não deveria ter um intervalo de 4 segundos?<br/><br/>Ocorre que está executando as ações após a terceira condição ser satisfeita em 2 segundos (contando apenas 1 intervalo).<br/><br/>Preciso que os intervalos sejam cumulativos.<br/><br/>Agradeço a ajuda.</span></p> As condicionais são iguais. T…tag:labdegaragem.com,2019-04-12:6223006:Comment:7053842019-04-12T13:34:24.931ZRodrigo Otavio C. Borgeshttps://labdegaragem.com/profile/RodrigoOtavioCBorges
As condicionais são iguais. Trata-se da verificação de duas entradas analógicas três vezes com um intervalo de tempo entre elas.<br />
<br />
- Verifica uma vez, aguarda um tempo;<br />
- Se verdadeiro verifica de novo e aguarda mais um tempo;<br />
- Se verdadeiro verifica uma terceira vez;<br />
- Se verdadeiro executa uns acionamentos.
As condicionais são iguais. Trata-se da verificação de duas entradas analógicas três vezes com um intervalo de tempo entre elas.<br />
<br />
- Verifica uma vez, aguarda um tempo;<br />
- Se verdadeiro verifica de novo e aguarda mais um tempo;<br />
- Se verdadeiro verifica uma terceira vez;<br />
- Se verdadeiro executa uns acionamentos. Como funcionam as suas condi…tag:labdegaragem.com,2019-04-12:6223006:Comment:7055782019-04-12T13:22:39.352ZJoao Vitorhttps://labdegaragem.com/profile/jvsilvictor
<p></p>
<p>Como funcionam as suas condicionais ?<br/><br/>Elas podem acontecer em qlqr ordem ou possuem dependências entre si? Por exemplo, a 2 pode acontecer sem que a 1 ocorra ? Ou a 2 somente pode acontecer se antes a 1 ocorrer e se manter verdadeira ?</p>
<p></p>
<p>Como funcionam as suas condicionais ?<br/><br/>Elas podem acontecer em qlqr ordem ou possuem dependências entre si? Por exemplo, a 2 pode acontecer sem que a 1 ocorra ? Ou a 2 somente pode acontecer se antes a 1 ocorrer e se manter verdadeira ?</p> Sim preciso executar outras a…tag:labdegaragem.com,2019-04-12:6223006:Comment:7053832019-04-12T12:56:29.013ZRodrigo Otavio C. Borgeshttps://labdegaragem.com/profile/RodrigoOtavioCBorges
Sim preciso executar outras atividades durante o intervalo de tempo.<br />
<br />
Sim as funções serão executadas somente após transcorridos os intervalos de tempo.<br />
<br />
Sobre o !ledState ok.
Sim preciso executar outras atividades durante o intervalo de tempo.<br />
<br />
Sim as funções serão executadas somente após transcorridos os intervalos de tempo.<br />
<br />
Sobre o !ledState ok. Sim, bloqueia.Durante esse te…tag:labdegaragem.com,2019-04-12:6223006:Comment:7056282019-04-12T12:48:54.435ZJoao Vitorhttps://labdegaragem.com/profile/jvsilvictor
<p>Sim, bloqueia.<br></br><br></br>Durante esse tempo você quer que ele continue executando outras atividades?</p>
<p></p>
<p>As funções do final somente podem ser executadas após o término do(s) intervalos ?<br></br><br></br><br></br>Sobre a inversão de valor no <strong>ledState</strong> , você pode substituir seu if/else por <strong>ledState = !ledState</strong>;</p>
<p>O Operador <strong>! </strong>significa uma inversão do valor booleano, fazendo o papel de uma porta <strong>NOT</strong>. Por exemplo, se 0,…</p>
<p>Sim, bloqueia.<br/><br/>Durante esse tempo você quer que ele continue executando outras atividades?</p>
<p></p>
<p>As funções do final somente podem ser executadas após o término do(s) intervalos ?<br/><br/><br/>Sobre a inversão de valor no <strong>ledState</strong> , você pode substituir seu if/else por <strong>ledState = !ledState</strong>;</p>
<p>O Operador <strong>! </strong>significa uma inversão do valor booleano, fazendo o papel de uma porta <strong>NOT</strong>. Por exemplo, se 0, passa para 1; se true, passa pra false; se LOW, vira HIGH e vice-versa.</p> Fiz assim:
void loop() {
if…tag:labdegaragem.com,2019-04-12:6223006:Comment:7053782019-04-12T01:28:09.447ZRodrigo Otavio C. Borgeshttps://labdegaragem.com/profile/RodrigoOtavioCBorges
Fiz assim:<br />
<br />
void loop() {<br />
<br />
if (condition1){<br />
<br />
unsigned long previous_millis = millis();<br />
while(millis() - previous_millis <= interval1);<br />
<br />
if (condition2){<br />
<br />
unsigned long previous_millis = millis();<br />
while(millis() - previous_millis <= interval2);<br />
<br />
if (condition3){<br />
<br />
unsigned long previous_millis = millis();<br />
while(millis() - previous_millis <= interval3);<br />
<br />
if (ledState == LOW) {<br />
ledState = HIGH;<br />
} else {<br />
ledState = LOW;<br />
}<br />
lcd.clear();<br />
lcd.setCursor(0, 1);<br />
lcd.print("tempo: ");<br />
unsigned long…
Fiz assim:<br />
<br />
void loop() {<br />
<br />
if (condition1){<br />
<br />
unsigned long previous_millis = millis();<br />
while(millis() - previous_millis <= interval1);<br />
<br />
if (condition2){<br />
<br />
unsigned long previous_millis = millis();<br />
while(millis() - previous_millis <= interval2);<br />
<br />
if (condition3){<br />
<br />
unsigned long previous_millis = millis();<br />
while(millis() - previous_millis <= interval3);<br />
<br />
if (ledState == LOW) {<br />
ledState = HIGH;<br />
} else {<br />
ledState = LOW;<br />
}<br />
lcd.clear();<br />
lcd.setCursor(0, 1);<br />
lcd.print("tempo: ");<br />
unsigned long tempo = millis();<br />
lcd.println(tempo);<br />
digitalWrite(saida_1, ledState);<br />
<br />
}<br />
}<br />
}<br />
}<br />
<br />
Para o caso de intervalo1 = intervalo2 = intervalo3 = 2000, o intervalo de atraso foi de 6000 (está certo).<br />
<br />
Eu estou usando a função millis () junto com ciclos while. Isso bloqueia o processador?<br />
<br />
Eu gostaria que não bloqueasse. Eu queria que fosse como o exemplo blink withou delay.<br />
<br />
Obrigado. Se refere ao valor printado n…tag:labdegaragem.com,2019-04-11:6223006:Comment:7055642019-04-11T17:10:55.261ZJoao Vitorhttps://labdegaragem.com/profile/jvsilvictor
<p>Se refere ao valor printado no final (18041, 24051, 30061...) ?</p>
<p></p>
<p>Coloque pra printar a diferença entre o <strong>previous_millis1</strong> , que é quando <span style="text-decoration: underline;">inicia</span> o processo e verificação dos intervalos e um <strong>millis()</strong> assim que tudo <span style="text-decoration: underline;">termina</span> de ser executado.</p>
<p></p>
<p><strong>Exemplo:</strong></p>
<p>Serial.print("Duração: ");</p>
<p>Serial.print(((millis() -…</p>
<p>Se refere ao valor printado no final (18041, 24051, 30061...) ?</p>
<p></p>
<p>Coloque pra printar a diferença entre o <strong>previous_millis1</strong> , que é quando <span style="text-decoration: underline;">inicia</span> o processo e verificação dos intervalos e um <strong>millis()</strong> assim que tudo <span style="text-decoration: underline;">termina</span> de ser executado.</p>
<p></p>
<p><strong>Exemplo:</strong></p>
<p>Serial.print("Duração: ");</p>
<p>Serial.print(((millis() - previous_millis1)/1000),2); //Convertido pra segundo e 2 casas decimais</p>
<p>Serial.println(" segundos");</p>
<p></p>
<p></p>
<p>O resultado será, em segundos, aproximadamente a soma dos 3 intervalos. Muito possivelmente poderá passar um pouco. Como 6.15 , 6.25 segundos...</p> Usando o micros() o erro cont…tag:labdegaragem.com,2019-04-11:6223006:Comment:7056172019-04-11T15:37:29.801ZRodrigo Otavio C. Borgeshttps://labdegaragem.com/profile/RodrigoOtavioCBorges
<p>Usando o micros() o erro continua bem perceptível.</p>
<p>Não existe uma forma de após a conclusão das ações, "resetar" o contador? Daí a próxima vez que entrar na condição o tempo começaria do zero. É possível?</p>
<p>Digo usando o código com o recurso while.</p>
<p>Usando o micros() o erro continua bem perceptível.</p>
<p>Não existe uma forma de após a conclusão das ações, "resetar" o contador? Daí a próxima vez que entrar na condição o tempo começaria do zero. É possível?</p>
<p>Digo usando o código com o recurso while.</p> Isso ocorre devido a duração…tag:labdegaragem.com,2019-04-11:6223006:Comment:7054852019-04-11T15:19:27.366ZJoao Vitorhttps://labdegaragem.com/profile/jvsilvictor
<p>Isso ocorre devido a duração das operações a serem realizadas e do tempo que a própria função leva para obter o valor da função millis() e efetuar a comparação.<br></br><br></br>Por exemplo, se a última ação do ultimo intervalo dura 500ms, se ela for iniciada em 5800ms, ela terminará em 6300ms. Dessa forma passa em 0,3s o estabelecido (6s totais), para então não atender mais as condições.</p>
<p><br></br>Você quer uma forma de interromper a atividade em execução caso atinja os 6s tendo ou não finalizado…</p>
<p>Isso ocorre devido a duração das operações a serem realizadas e do tempo que a própria função leva para obter o valor da função millis() e efetuar a comparação.<br/><br/>Por exemplo, se a última ação do ultimo intervalo dura 500ms, se ela for iniciada em 5800ms, ela terminará em 6300ms. Dessa forma passa em 0,3s o estabelecido (6s totais), para então não atender mais as condições.</p>
<p><br/>Você quer uma forma de interromper a atividade em execução caso atinja os 6s tendo ou não finalizado essa tarefa ? Um WatchDog Timer, talvez ?</p>
<p></p>
<p>Ou, pra ver se ameniza essa diferença de tempo, faça o teste usando micros(). Assim você terá uma comparação de tempo com maior precisão.</p>
<p></p>
<p>1s = 1.000.000 microsegndos</p>
<p></p>
<p></p>
<p></p>