Enquanto Isso: (while)

Nesse experimento vamos aprender sobre outra condição lógica aumentando as possibilidades de programação.

!Informações Importantes

Vamos introduzir a instrução while, uma das estruturas de programação mais interessantes existentes. Você pode não se dar conta mas ela está presente na nossa vida, por exemplo: enquanto estiver com muito sono, você deve dormir. Enquanto não estiver satisfeito, coma.

Assim como o if a declaração requer dois componentes para ser completa: uma condição de parada e uma consequência. A lógica do while() funciona da seguinte forma:

Enquanto a condição de parada não ocorre, uma consequência é executada repetidamente. Somente quando a condição de parada é atingida o programa sai do while()e segue para o resto das instruções do programa. Pode-se dizer que o funcionamento é muito parecido com a função loop(), com a diferença que a função loop() não possui condição de parada, ou seja, executa "para sempre".

!Identificando os Componentes

Botão Right Interface

!Componentes de código

Execução Condicionada: while( [condição de parada] ) { [consequência] };

A anatomia de um while:

while(Não é Final de Semana)
{
  Trabalhe das 06:00 às 18:00
}

Isso significa que enquanto não é final de semana, devemos trabalhar.

A condição de parada, pode ser qualquer declaração que possa ser avaliada como verdadeira ou falsa. Para construir essas declarações condicionais, geralmente usamos operadores de comparação, como já foi explicado no experimento do if.

!Executando no Arduino

O código abaixo faz com que o LED amarelo fique ligado enquanto o botão RIGHT não é apertado.

//Pino ligado ao push-button
int buttonPin = A0;
//Variavel para fazer a checagem
int buttonState;
// Associando o LEDs aos Pinos correspondentes
int ledAmarelo = A1;

void setup()
  {
  // Inicializar cada pino do LED como saída
  pinMode(ledAmarelo,OUTPUT); 
  // Define o pino do botao como entrada
  pinMode(buttonPin, INPUT);
}

void loop() {
  
  // Verifica se o estado do botao foi alterado 
  buttonState = analogRead(buttonPin);
  // Limpa qualquer ruido      
  buttonState = 1023;
  // Enquanto nenhum botao está sendo pressionado realiza a leitura novamente
  while (buttonState >= 897)
  {
    //Acende o LED Amarelo
    digitalWrite(ledAmarelo, HIGH);
    buttonState = analogRead(buttonPin);
  } 
  if (buttonState < 897)
    { 
        // Se o botão Right está sendo apertado  
        while (buttonState < 69)
          {
            //Apaga o LED Amarelo
            digitalWrite(ledAmarelo, LOW);
            buttonState = analogRead(buttonPin);        
          } 
      }  
}  

!Sua vez!

Tente modificar o código para que o LED verde acenda e o buzzer emita um som também.

Resposta

//Pino ligado ao push-button
int buttonPin = A0;
//Pino ligado ao buzzer
int buzzer = 5;
//Variavel para fazer a checagem
int buttonState;
// Associando o LEDs aos Pinos correspondentes
int ledAmarelo = A1;        
int ledVerde = A2;

void setup()
  {
  // Inicializar cada pino do LED como saída
  pinMode(ledAmarelo,OUTPUT);
  pinMode(ledVerde,OUTPUT);
  // Define o pino do Buzzer como Saida 
  pinMode(buzzer,OUTPUT); 
  // Define o pino do botao como entrada
  pinMode(buttonPin, INPUT);
}

void loop() {
  
  // Verifica se o estado do botao foi alterado 
  buttonState = analogRead(buttonPin);
  // Limpa qualquer ruido      
  buttonState = 1023;
  // Enquanto nenhum botao está sendo pressionado realiza a leitura novamente
  while (buttonState >= 897)
  {
    //Acende o LED Amarelo
    digitalWrite(ledAmarelo, HIGH);
    digitalWrite(ledVerde, LOW);
    buttonState = analogRead(buttonPin);
  } 
  if (buttonState < 897)
    { 
        // Se o botão Right está sendo apertado  
        while (buttonState < 69)
          {
            //Apaga o LED Amarelo
            digitalWrite(ledAmarelo, LOW);
            digitalWrite(ledVerde, HIGH);
            // Aciona o Buzzer na frequencia relativa ao Sol em Hz
            tone(buzzer,392);            
            delay(200);
            noTone(buzzer); 
            buttonState = analogRead(buttonPin);        
          } 
     
      }  
}