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
!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); } } }