quinta-feira, 22 de dezembro de 2011

Laços While & For do Arduino

comando for

Descrição

O comando “for” é utilizado para repetir blocos de comandos inseridos entre chaves. Um contador incremental é normalmente utilizado para incrementar e finalizar o laço. O comando “for” é útil em qualquer tarefa repetitiva, e largamente utilizado em combinação com arrays para processar coleções de dados/portas.
O laço “for” é constituído de 3 partes:
for (iniciação; condição; incremento) {
//comando(s);
}
A iniciação (declaração da variável contadora) acontece primeiro e exatamente uma única vez. Cada vez que o laço “roda”, a condição é testada; se é verdadeira, o bloco de comandos e seu incremento é executado, então a condição é verificada novamente. Quando a condição se torna falsa, o laço termina.

Exemplo

// Esvanece um LED usando uma porta PWM
int PWMpin = 10; // LED em série com resistor 470 ohm na porta 10

void setup()
{
  // nada a ser feito no setup
}

void loop()
{
   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   } 
}



Dicas de Codificação

O laço “for” do C é muito mais flexível que outros laços encontrados em outras linguagens de programação, incluindo BASIC. Qualquer uma das 3 partes (ou todas elas) podem ser omitidas, embora os pontos e vírgulas são obrigatórios. Tanto que os comandos de iniciação, condição e incremento podem ser qualquer comando válido em C, mesmo que as variáveis não tenham relação entre si. E é permitido o uso de qualquer tipo de variável, mesmo float. Estes tipos não usuais para comandos “for” devem fornecer soluções para alguns problemas raros de programação.
Por exemplo, utilizando multiplicação na parte incremental gerará uma progressão logarítimica:

for(int x = 2; x < 100; x = x * 1.5){
println(x);
}
Resultado: 2,3,4,6,9,13,19,28,42,63,94
Outro exemplo, esvanece um LED ao ligar e desligar com esse laço “for”

void loop()
{
   int x = 1;
   for (int i = 0; i > -1; i = i + x){
      analogWrite(PWMpin, i);
      if (i == 255) x = -1;             // muda a direção no pico
      delay(10);
   } 
}

laço while

Descrição

Laços “while” vão executar sequencialmente e para sempre, até que a expressão dentro dos parênteses () se torne falsa. Algum evento deve mudar o estado da variável testada, ou então o laço “while” não terminará nunca. Este evento pode estar em seu código, como uma variável incremental, ou uma condição externa, como um sensor de teste, um botão etc.

Sintaxe

while(expressão){
  // comando(s)
}

Parametros

expressão - um (boolean) comando C que retorne verdadeiro ou falso (true ou false)

Exemplo

var = 0;
while(var < 200){
  // faça alguma coisa repetitiva por 200 vezes
  var++;
}

Traduzido do Original em Inglês por Renato Aloi

5 comentários:

  1. Caro Renato!

    Inicialmente desejo um Feliz Ano Novo para vc e sua família.

    Quero também agradecer a vc por compartilhar seu conhecimento através de suas vídeo-aulas e este blog de forma extremamente didática e acessível. Sou iniciante e estou aprendendo muito com vc.

    Muito obrigado.
    Atenciosamente
    Jacson Ilha

    ResponderExcluir
  2. Renato boa noite sou novato no arduino aluno do curso de automação industrial SENAI RJ e gostaria de te pedir uma informação por favor
    Gostaria de acender um led quando enviasse um caracter pela serial e tivesse um reed switch em nivel lógico 1 simultaneamente como faço está lógica?

    ResponderExcluir
  3. Olá Renato,

    Primeiro gostaria de dizer que gosto muito o seu blog e que em muitos momentos ele foi a salvação para mim.
    Seu Tec. em Automação Industrial, mas como não exerço a função e como a parte de programação no curso técnico é bem básica, estou tendo alguma dificuldade em um pequeno projeto.
    A idéia é a seguinte:
    Usar um Arduino para controlar a entrada de pessoas por 3 portas, e aleatoriamente selecionar uma pessoa (digamos que para ganhar um premio). Só que enquanto um porta esta acionada (ex. com uma sirene ligada ) as outra devem estar rodando o sorteio normalmente.
    Consegui fazer parte da programação, usando o gerador de números randomicos, mas ainda estou tendo um pouco de dificuldade, pois não posso acrescentar um delay na programação, já que se o programa estivesse em delay e uma pessoa passar por uma das porta na seria sorteada.
    Pode me ajudar?

    ResponderExcluir
  4. Pessoal,

    Não deixe de visitar o fórum em:

    http://www.seriallink.com.br/forum

    Lá poderemos discutir assuntos relacionados a Arduino, projetos etc. Ah! Quando postar lá não esquece de me enviar o link para eu participar tbém!

    renato.aloi@gmail.com

    Abraços,
    Renato

    ResponderExcluir
  5. Cara é hilário, se pego outros exemplos na net, mesmo que tirados do arduino cc tenho dificuldade, se leio uma explicação sua ou assisto um vídeo parece que assimilo muito mais fácil e já da certo logo de cara, acredito que já estou falando "aloino" kkkk

    ResponderExcluir