Descrición:
switch() … case é unha estrutura de control que permite elixir entre varios camiños para executar diferentes procesos excluíntes entre si.
É útil cando hai moitas posibilidades, pois permite facer unha serie de comparacións sen necesidade de aniñar moitas estruturas if… else.
Exemplo:
|
Se a variable toma o valor 4 execútase o proceso 1, se toma o valor 5 execútase o proceso 2 e se non se cumpre ningunha das anteriores condicións (default) execútase o proceso 3. |
Imos utilizala para que, segundo sexa o número de veces que premamos nun pulsador, se acendan diferentes LEDs.
Montaxe:
Utilizaremos a seguinte montaxe: Conectaremos 3 LEDs con resistencias de 220Ω aos pins 11, 12 e 13, e un pulsador con resistencia de 10k ao pin 2.

Programa:
Imos facer que cada vez que premamos nun pulsador unha variable aumente de valor, desde 0 ata 3. Segundo o valor que colla, executamos procesos diferentes.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
// Declaración de variables int led1=13; int led2=12; int led3=11; int pulsador1=2; int opcion=0; // variable para elixir os diferentes casos // Configuración void setup(){ Serial.begin(9600); // Inicia a comunicación serie pinMode(led1, OUTPUT); // Configuramos o LED como saída pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); } // Programa void loop(){ if (digitalRead(pulsador1) == HIGH){ // Cando prememos o pulsador1 while((digitalRead(pulsador1) == HIGH)); // Agardamos a soltalo delay(20); // 0,02s para evitar o efecto rebote opcion=opcion+1; // sumamos 1 á variable opción if(opcion==4){ // cando vale 4 poñemos a 0 opcion=0; } } switch(opcion){ // Segundo sexa o valor da variable opcion (1,2 ou default) // Executamos un proceso diferente. case 1: digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); break; case 2: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); break; case 3: digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); break; default: digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); break; } Serial.println(opcion); delay (100); } |
Propostas:
- Máis estados: Fai un programa con 6 casos diferentes, engadindo novos procesos (os LEDs escintilan, acéndense dun en un, etc.)
