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

Buzzer Interface

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