# Laços ou Funções?

**URL:** <https://forum.fazedores.com/t/lacos-ou-funcoes/4909>\
**Category:** Arduino\
**Created:** [Novembro 1, 2017, 3:47am UTC](https://forum.fazedores.com/t/lacos-ou-funcoes/4909 "2017-11-01T03:47:32Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![shandemoura](https://avatars.discourse-cdn.com/v4/letter/s/5daacb/32.png) [@shandemoura](https://forum.fazedores.com/u/shandemoura)\
**Post date:** [Novembro 1, 2017, 3:47am UTC](https://forum.fazedores.com/t/lacos-ou-funcoes/4909/1 "2017-11-01T03:47:32Z")

</div>

Estou tentando executar um projeto que precisa funcionar em 3 etapas: primeiro defino o tempo de execução, depois uma temperatura e por último esses dados controlam o aquecimento de um recipiente com água, mantendo a temperatura definida pelo tempo definido, desligando em seguida. As 3 funções funcionam bem separadamente, mas não sei como uni-las num só sketch sem que sejam executadas ao mesmo tempo. Colocaria cada fase dentro de um laço? Ou chamaria uma função pra cada etapa? O que funcionaria? Grato pela ajuda

---

<div class="post-metadata">

**Author:** ![winther](https://avatars.discourse-cdn.com/v4/letter/w/85f322/32.png) [@winther](https://forum.fazedores.com/u/winther)\
**Post date:** [Novembro 2, 2017, 5:18pm UTC](https://forum.fazedores.com/t/lacos-ou-funcoes/4909/2 "2017-11-02T17:18:16Z")

</div>

Olá, vc pode isolar as funções dentro do código e chama-las separadamente:

```
void loop(){
  if(alguma-condição){
      setar-o-tempo();
  }

  if(alguma-outra-condição){
      setar-a-temperatura();
  }

  if(alguma-terceira-condição){
      executar-processo();
  }
}//fim do void loop

void setar-o-tempo(){
  //seu código que seta o tempo
}

void setar-a-temperatura(){
  //seu código que seta a temperatura
}

void executar-processo(){
  //seu código executa os processos
}
```

---

<div class="post-metadata">

**Author:** ![maxdesa](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/maxdesa/32/2110_2.png) [@maxdesa](https://forum.fazedores.com/u/maxdesa)\
**Post date:** [Dezembro 21, 2017, 1:21am UTC](https://forum.fazedores.com/t/lacos-ou-funcoes/4909/3 "2017-12-21T01:21:18Z")

</div>

Ola ShandeMoura,  
Aprovenitando a resposta do amigo “winther” vale lembra que no arduino o bloco loop é executado infintas vezes ate que que o arduino seja desligado.  
Com relação a sua duvida, o Arduíno irá executar uma função de cada vez.  
Se possível poste o código para uma ajuda mais pontual  
Att  
Max

---

<div class="post-metadata">

**Author:** ![lint](https://avatars.discourse-cdn.com/v4/letter/l/9d8465/32.png) [@lint](https://forum.fazedores.com/u/lint)\
**Post date:** [Dezembro 23, 2017, 9:57pm UTC](https://forum.fazedores.com/t/lacos-ou-funcoes/4909/4 "2017-12-23T21:57:11Z")

</div>

Pelo que me parece você está fazendo uma função que bloqueia o processador, ou seja, dentro da função chamada existe um loop, correto?

Por exemplo função olha\_temperatura(int temperatura) que você deve ter aí:

void olha\_temperatura(int temperatura) {  
while(1) {  
if(pega\_temperatura()\>temperatura) diminui\_temperatura();  
if(pega\_temperatura()\<temperatura) aumenta\_temperatura();  
}  
}

Se for isso, a única coisa que você precisa fazer é remover o loop da função fazendo com que ela não bloqueie. Ao invés de deixar o loop na função olha\_temperatura(), você faz com que ela funcione apenas uma checagem, mas aí você chama ela reiteradamente.

Veja:  
void olha\_temperatura(int temperatura) {  
//while(1) { \<— comentado!  
if(pega\_temperatura()\>temperatura) diminui\_temperatura();  
if(pega\_temperatura()\<temperatura) aumenta\_temperatura();  
//}  
}

void loop() {  
tempo=define\_tempo(); // essa função já deve estar ok  
while(tempo) {  
olha\_temperatura();  
sleepms(1); // coloque aqui seu sleep favorito, podendo inclusive ser 0 se o valor de tempo for muito grande  
tempo–; // diminui 1 no valor de tempo  
} // quando tempo for 0 ele sai  
} // reinicia o programa
