Vamos a ver cómo conectar un DIP switch deslizante con Arduino y vamos a leer el estado de sus interruptores a través de los pines digitales.
Lo vamos a implementar con un DIP switch de 3 posiciones para que sea más sencillo, pero se haría exactamente igual con cualquier otro DIP switch deslizante.
Materiales
Estos son todos los materiales que necesitamos para conectar el DIP switch con nuestro Arduino:
Una placa Arduino (Yo usaré Arduino UNO) | ||
Un DIP switch de 3 posiciones | ||
3 resistencias de 10KΩ | ||
Cables | ||
Una protoboard | ||
Un ordenador con el IDE de Arduino instalado |
Conexiones
Estas son las conexiones necesarias:
El DIP switch tiene 6 pines, 2 por cada actuador o interruptor:
Los 3 pines situados en el lado etiquetado con ON van conectados a los 5V del Arduino, de esta forma los 3 actuadores recibirán alimentación:
Los 3 pines opuestos a los anteriores van conectados a pines digitales del Arduino:
El interruptor 1 va conectado al pin digital 2, el interruptor 2 al pin 3 y el interruptor 3 al pin 4. Si quieres, puedes utilizar otros pines en tu Arduino.
Como puedes ver, los pines del DIP switch que hemos conectado con Arduino también van conectados a GND con una resistencia de 10Kohm cada uno. Al conectar las resistencias de este modo estamos utilizando una configuración pull down, por lo que los pines digitales de Arduino recibirán valor HIGH cuando los actuadores estén en ON y valor LOW cuando estén en OFF:
Sketch
El sketch completo que nos permitirá leer los valores del DIP switch es el siguiente:
//DECLARACIONES
const int DIP[3] = {2,3,4};
int estados[3] = {LOW, LOW, LOW};
//CONFIGURACIÓN
void setup() {
Serial.begin(9600);
for(int i=0; i<3; i++){
pinMode(DIP[i], INPUT);
}
}
//FUNCIÓN LOOP
void loop() {
for(int i=0; i<3; i++){
estados[i]=digitalRead(DIP[i]);
Serial.print(i+1);
Serial.print(": ");
Serial.println(estados[i]);
}
Serial.println("");
delay(1000);
}
Declaraciones
Vamos a declarar 2 arrays de dimensión 3. La dimensión de los arrays debe ser la misma que el número de posiciones del DIP switch. En este caso son 3.
El primero contiene 3 constantes de tipo entero cuyos valores son los pines digitales en los que está conectado el DIP switch:
const int DIP[3] = {2, 3, 4};
El pin digital del interruptor 1 (2) lo pondremos en la primera posición del array, el pin del interruptor 2 (3) en la segunda posición y el pin del interruptor 3 (4) en la tercera.
El segundo array también es de tipo entero, pero en este caso no es constante. Lo usaremos para almacenar los estados del DIP switch cuando los leamos:
int estados[3] = {LOW, LOW, LOW};
El estado del interruptor 1 lo almacenaremos en la primera posición del array, el estado del interruptor 2 en la segunda y el estado del 3 en la tercera. Si te fijas, es el mismo orden en el que hemos guardado los pines digitales en el array DIP. Esto es importante hacerlo así para que las posiciones coincidan y sea más fácil relacionar el pin con el valor a la hora de hacer las lecturas.
Configuración
Dentro de la función setup() tenemos que inicializar el puerto serie para poder visualizar en el monitor serie los estados del DIP switch:
Serial.begin(9600);
Lo siguiente es configurar los pines digitales como entrada para poder leer los valores que envía el DIP al Arduino:
for(int i=0; i<3; i++){
pinMode(DIP[i], INPUT);
}
Como los pines digitales están almacenados en el array DIP es muy cómodo hacer esta configuración utilizando un bucle for. Por cada posición del array (de la 0 a la 2) llamamos a la función pinMode() para hacer la configuración.
Función loop
Y ya solo nos queda la función principal en la que vamos a realizar la lectura de los pines digitales.
Fíjate que utilizo de nuevo un bucle for para recorrer el array DIP:
for(int i=0; i<3; i++){
estados[i]=digitalRead(DIP[i]);
Serial.print(i+1);
Serial.print(": ");
Serial.println(estados[i]);
}
Con digitalRead(DIP[i]) leemos el valor del pin almacenado en la posición i del array DIP. Ese valor será LOW o HIGH dependiendo de si el actuador correspondiente está en ON o en OFF.
El valor devuelto por digitalRead() lo almacenamos en la posición i del array estados. De esta forma tenemos el dato guardado en la misma posición que ocupa el pin en el array DIP.
Cuando el bucle completa las 3 repeticiones tendremos los valores de todos los interruptores del DIP almacenados en el array estados.
El resto de instrucciones del bucle for muestran en el monitor serie el número del interruptor (i+1), dos puntos («: «) y el valor correspondiente leído (estados[i]). Algo así:
Recuerda que la variable i va de 0 a 2 y los interruptores de 1 a 3, por eso le sumo uno. Es por claridad, no afecta al funcionamiento.
Fuera del bucle for hay otras dos instrucciones que nos ayudarán a visualizar de forma más clara los datos en el monitor serie:
Serial.println("");
delay(1000);
La primera simplemente hace un salto de línea después de mostrar el valor de los 3 interruptores y la segunda detiene la ejecución un segundo antes de repetir la ejecución de la función loop. De esta forma veremos mas claros los datos en el monitor serie.
El resultado final
Ahora carga el sketch en tu Arduino y comprueba los valores que aparecen en el monitor serie.
Cuando el interruptor 1 esté en estado ON y el resto en estado OFF tendrás que ver algo como esto:
Y con el interruptor 1 y el 2 en estado ON y el 3 en estado OFF verás esto otro:
Ahora es tu turno. Prueba distintas combinaciones y comprueba el resultado en el monitor serie. Te dejo aquí una tabla para que puedas cotejarlos:
Interruptor 1 | Interruptor 2 | Interruptor 3 | 1 | 2 | 3 |
OFF | OFF | ON | 0 | 0 | 1 |
OFF | ON | OFF | 0 | 1 | 0 |
OFF | ON | ON | 0 | 1 | 1 |
ON | OFF | OFF | 1 | 0 | 0 |
ON | OFF | ON | 1 | 0 | 1 |
ON | ON | OFF | 1 | 1 | 0 |
ON | ON | ON | 1 | 1 | 1 |
¡Suscríbete a la newsletter y no te pierdas nada!
Te avisaré cuando publique nuevo contenido en paraarduino.com y en mi canal de YouTube (@ParaArduino).