Estrutura de decisão Switch / Case no Arduino

Estrutura de decisão Switch / Case no Arduino

A estrutura de decisão condicional Switch / Case é utilizada para que seja possível escolher uma opção dentre várias existentes, eliminando a necessidade de se usar diversos if .. else encadeados.

Isso simplifica a codificação do algoritmo, e facilita sua depuração e atualização.

Assim, esse comando testa uma condição ("caso"), e dependendo do resultado, executará os códigos associados a cada caso.

Switch / Case - Sintaxe

A sintaxe do Switch / Case no Arduino é, como esperamos, a da linguagem C, como podemos ver a seguir:

switch <variável) {
 case <valor1>:
   comandos a executar
   break;
 case <valor2>:
   comandos a executar
   break;
 case <valor3>:
   comandos a executar
   break;
 case <valorN>: 
   comandos a executar
   break;
 default:
   comandos-padrão
   break;
}

O conteúdo da variável passada para a instrução switch é testado, sendo comparado com os valores de cada caso, e quando uma correspondência for encontrada (variável igual ao caso), os comandos referentes ao caso são executados. Se o primeiro caso não corresponder à variável, então o próximo é avaliado, e assim sucessivamente até que uma correspondência de valores seja encontrada. Caso nenhum caso corresponda, então os comandos do bloco default serão executados, por padrão.

Note o uso da instrução break; em cada caso. Ela é utilizada para encerrar as comparações caso um valor correspondente seja encontrado. Se essa instrução não for utilizada, mesmo que uma correspondência seja encontrada, o comando switch continuará a fazer comparações da variável com os casos seguintes, o que é desnecessário.

Exemplo

Vejamos um exemplo de aplicação da estrutura switch / case no Arduino. Vamos construir um circuito que consiste em quatro LEDs conectados às saídas digitais do microcontrolador, que serão acesos de acordo com um valor numérico fornecido por meio do monitor serial. Usaremos o switch / case para ativar o LED correspondente, dependendo do valor fornecido.

A seguir, temos o diagrama esquemático do circuito a ser utilizado:

Estrutura Switch Case no Arduino

O circuito representado em uma matriz de contatos pode ser visto na figura a seguir:

Arduino Switch Case

E a seguir, o código-fonte de nosso sketch:

Código

const int Led1 = 7;
const int Led2 = 8;
const int Led3 = 9;
const int Led4 = 10;
void setup() {
 Serial.begin(9600);
 pinMode(Led1, OUTPUT);
 pinMode(Led2, OUTPUT);
 pinMode(Led3, OUTPUT);
 pinMode(Led4, OUTPUT);
}
void loop() {
 if (Serial.available()) {
   char Led = Serial.read();
   switch (Led) {
     case '1':
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      break;
     case '2':
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      break;
     case '3':
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, LOW);
      break;
     case '4':
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, HIGH);
      break;
     default:
      Serial.print("Valor ");
      Serial.print(Led);
      Serial.println(" incorreto.");
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
     }
   }
 }

Ao executar esse programa, devemos abrir o Monitor Serial e então entrar com um valor numérico, que irá acender o LED correspondente (valores de 1 a 4) ou então apagar todos os LEDs e exibir a mensagem de erro (qualquer outro valor digitado).

Isso é conseguido utilizando-se o comando switch / case para avaliar o valor que foi digitado pelo usuário, e tomando a decisão de qual LED acender baseado nesse valor numérico.

Anterior: Criando e usando arrays no Arduino

 

Sobre Fábio dos Reis (1193 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Astronomia, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*