Se "isso", faça "aquilo" (if)
Seguindo a linha de experimentos, vamos agora aprender sobre condições lógicas, abrindo muitas possibilidades para a programação do Arduino.
!Informações Importantes
Este experimento introduz a instrução if
, uma das estruturas de programação mais fundamentais existentes, não apenas importantes para computadores, mas para a maioria das decisões que tomamos em nossas vidas. Se está nublado lá fora, então leve guarda-chuva – ou então: se você está com fome, então, faça um sanduíche. Assim como nós, os computadores usam if
para fazer escolhas.
Um if
requer dois componentes: uma condição e uma consequência. A condição é um valor ou uma operação matemática, que é avaliada como verdadeira ou falsa. Se a condição for avaliada como verdadeira, a conseqüência é executada. A consequência pode ser um bloco de código de qualquer tamanho, seja uma linha ou centenas de linhas.
Se a condição for falsa, então a conseqüência é ignorada, e o programa começa a executar o código que vem logo após o if
.
!Identificando os Componentes
!Componentes de código
No Arduino, a anatomia de um if
em geral se parece com o seguinte:
if ( [condição] ) { [consequência] };
No exemplo abaixo, a condição serve para identificar se a entrada do pino 2 está acionada – por exemplo, caso um botão conectado ao pino 2 esteja pressionado.
if (digitalRead(2) == LOW) { // Faça alguma coisa porque o botão está pressionado }
A condição pode ser qualquer declaração que possa ser avaliada como verdadeira ou falsa. Podemos construir expressões condicionais, e para isso muitas vezes usamos operadores de comparação. Existem vários tipos de operadores de comparação, entre eles:
Operadores de Comparação | Representação em Código |
---|---|
Menor que | < |
Maior que | > |
Menor ou igual | <= |
Maior ou igual | => |
Igual | == |
Diferente | != |
!Executando no Arduino
Execute o código abaixo no seu Arduino para fazer com que o buzzer toque notas musicais usando if
.
// Pino ligado ao buzzer int buzzer = 5; int frequencia = 0; void setup() { // Define o pino do buzzer como saida pinMode(buzzer, OUTPUT); } void loop() { frequencia = frequencia + 1; if (frequencia > 392) { // Se atingiu o valor da última nota frequencia = 0; // Zera a variável } if (frequencia == 261) { // Aciona o buzzer na frequência relativa ao Dó em Hz tone(buzzer, frequencia); // Espera um tempo para desativar delay(200); // Desativa o buzzer noTone(buzzer); } if (frequencia == 293) { // Aciona o buzzer na frequência relativa ao Ré em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } if (frequencia == 329) { // Aciona o buzzer na frequência relativa ao Mi em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } if (frequencia == 349) { // Aciona o buzzer na frequência relativa ao Fá em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } if (frequencia == 392) { // Aciona o buzzer na frequência relativa ao Sol em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } }
!Sua vez!
Tente modificar o código acima utilizando o LED amarelo para sinalizar que a variável tem valor 0 e o LED verde para indicar que ela atingiu o valor de 392.
Resposta
// Pino ligado ao buzzer int buzzer = 5; // Associa os LEDs aos pinos correspondentes int ledAmarelo = A1; int ledVerde = A2; int frequencia = 0; void setup() { // Define o pino do buzzer como saida pinMode(buzzer, OUTPUT); } void loop() { if (frequencia == 0) { // Acende o LED digitalWrite(ledAmarelo, HIGH); // Espera um pouco delay(200); // Apaga o LED digitalWrite(ledAmarelo, LOW); } frequencia = frequencia + 1; if (frequencia > 392) { // Se atingiu o valor da última nota frequencia = 0; // Zera a variável } if (frequencia == 261) { // Aciona o buzzer na frequência relativa ao Dó em Hz tone(buzzer, frequencia); // Espera um tempo para desativar delay(200); // Desativa o buzzer noTone(buzzer); } if (frequencia == 293) { // Aciona o buzzer na frequência relativa ao Ré em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } if (frequencia == 329) { // Aciona o buzzer na frequência relativa ao Mi em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } if (frequencia == 349) { // Aciona o buzzer na frequência relativa ao Fá em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); } if (frequencia == 392) { digitalWrite(ledVerde, HIGH); // Aciona o buzzer na frequência relativa ao Sol em Hz tone(buzzer, frequencia); delay(200); noTone(buzzer); digitalWrite(ledVerde, LOW); } }