Inicio » Componentes para Arduino » Interruptores para Arduino » DIP switch » Cómo conectar un DIP switch deslizante con Arduino

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.

DIP switch de 3 posiciones

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:

Cómo conectar un DIP switch deslizante con Arduino

El DIP switch tiene 6 pines, 2 por cada actuador o interruptor:

pines DIP switch

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:

Alimentación DIP switch

Los 3 pines opuestos a los anteriores van conectados a pines digitales del Arduino:

Conexión DIP switch con 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:

DIP switch on
Posición ON
DIP switch off
Posición 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 1Interruptor 2Interruptor 3123
OFFOFFON001
OFFONOFF010
OFFONON011
ONOFFOFF100
ONOFFON101
ONONOFF110
ONONON111

Te avisaré cuando publique nuevo contenido en paraarduino.com y en mi canal de YouTube (@ParaArduino).

No hemos podido validar tu suscripción.
¡Se ha realizado tu suscripción!

Newsletter

Suscríbete para que te avise cuando publique nuevo contenido.

Usamos Brevo como plataforma de marketing. Al hacer clic a continuación para enviar este formulario, consiente que la información proporcionada sea transferida a Brevo para su procesamiento de acuerdo con sus términos de uso