- Material requerido:
- Diagrama de circuito:
- Explicación de programación:
- Configuración de hardware para secuencia de LED parpadeantes:
- Subiendo y trabajando:
Este es el segundo tutorial de una secuencia de tutorial en el que estamos aprendiendo el LaunchPad MSP430G2 de Texas Instruments usando el IDE de Energia. En el último tutorial de Blinky LED, nos presentamos la placa de desarrollo LaunchPad y el IDE de Energia, también cargamos nuestro primer programa que consiste en hacer parpadear el LED a bordo a intervalos regulares.
En este tutorial aprenderemos a usar la opción de lectura digital y escritura digital para leer el estado de un dispositivo de entrada como un interruptor y controlar múltiples salidas como LED. Al final de este tutorial, habrá aprendido a trabajar con entradas y salidas digitales, que se pueden utilizar para conectar muchos sensores digitales como el sensor de infrarrojos, el sensor de PIR, etc. y también para encender o apagar salidas como LED, zumbador, etc. Suena interesante ¿¡¡derecho!!? Empecemos.
Material requerido:
- LaunchPad MSP430G2
- LED de cualquier color - 8
- Interruptor - 2
- Resistencia 1k - 8
- Cables de conexión
Diagrama de circuito:
En nuestro tutorial anterior, notamos que la plataforma de lanzamiento en sí viene con dos LED y un interruptor en la placa. Pero en este tutorial vamos a necesitar más que eso, ya que planeamos encender ocho luces LED en una secuencia cuando se presiona un botón. También cambiaremos la secuencia cuando se presione otro botón solo para que sea interesante. Entonces tenemos que construir un circuito con 8 luces LED y dos interruptores, el diagrama completo del circuito se puede encontrar a continuación.
Aquí los 8 LED son las salidas y los dos interruptores son las entradas. Podemos conectarlos a cualquier pin de E / S en la placa, pero he conectado los LRD del pin P1.0 al P2.1 y el interruptor 1 y 2 al pin P2.4 y P2.3 respectivamente como se muestra arriba.
Todos los pines del cátodo del LED están conectados a tierra y el pin del ánodo está conectado a los pines de E / S a través de una resistencia. Esta resistencia se llama resistencia limitadora de corriente, esta resistencia no es obligatoria para un MSP430 porque la corriente máxima que puede generar su pin de E / S es de solo 6 mA y el voltaje en el pin es solo de 3,6 V. Sin embargo, es una buena práctica utilizarlos. Cuando cualquiera de estos pines digitales sube, el LED respectivo se encenderá. Si puede recordar el último programa de LED de tutoriales, recordará que digitalWrite (LED_pin_name, HIGH) hará que el LED se ilumine y digitalWrite (LED_pin_name, LOW) se apagará.
Los interruptores son el dispositivo de entrada, un extremo del interruptor está conectado al terminal de tierra y el otro está conectado a los pines digitales P2.3 y P2.4. Esto significa que cada vez que presionemos el interruptor, el pin de E / S (2.3 o 2.4) estará conectado a tierra y quedará libre si no se presiona el botón. Veamos cómo podemos usar esta disposición durante la programación.
Explicación de programación:
El programa debe escribirse para controlar los 8 LED de una manera secuencial cuando se presiona el interruptor 1 y luego cuando se presiona el interruptor 2, la secuencia debe cambiarse. El programa completo y el video de demostración se pueden encontrar al final de esta página. Más adelante explicaré el programa línea por línea para que pueda entenderlo fácilmente.
Como siempre, deberíamos comenzar con la función void setup () dentro de la cual declararíamos los pines que estamos usando como pin de entrada o salida. En nuestro programa, los 8 pines LED son salidas y los 2 interruptores son entradas. Estos 8 LED están conectados de P1.0 a P2.1, que es el pin número 2 a 9 en la placa. Luego, los interruptores se conectan al pin P2.3 y al pin 2.4, que es el pin número 11 y 12 respectivamente. Así que hemos declarado lo siguiente en void setup ()
configuración vacía () {para (int i = 2; i <= 9; i ++) {pinMode (i, SALIDA); } para (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Como sabemos, la función pinMode () declara el pin como salida o entrada y la función digitalWrite () lo hace alto (ON) o bajo (OFF). Hemos utilizado un bucle for para hacer esta declaración para reducir el número de líneas. La variable “i” se incrementa de 2 a 9 en el de bucle y para cada incremento el interior función se ejecutará. Otra cosa que puede confundirlo es el término " INPUT_PULLUP ". Un pin se puede declarar como entrada simplemente llamando a la función pinMode (Pin_name, INPUT) pero aquí hemos utilizado un INPUT_PULLUP en lugar de un INPUT y ambos tienen un cambio notable.
Cuando usamos pines de microcontrolador, el pin debe estar conectado a bajo o alto. En este caso, el pin 11 y 12 está conectado al interruptor que se conectará a tierra cuando se presione. Pero cuando no se presiona el interruptor, el pin no está conectado a nada, esta condición se llama pin flotante y es mala para los microcontroladores. Entonces, para evitar esto, usamos una resistencia pull-up o pull-down para mantener el pin en un estado cuando se pone flotando. En el microcontrolador MSP430G2553, los pines de E / S tienen una resistencia pull-up incorporada. Para usar eso, todo lo que tenemos que hacer es llamar a INPUT_PULLUP en lugar de INPUT durante la declaración como lo hemos hecho anteriormente.
Ahora pasemos a la función void loop () . Todo lo que esté escrito en esta función se ejecutará para siempre. El primer paso en nuestro programa es verificar si el interruptor está presionado y si lo presiona debemos comenzar a hacer parpadear los LED en secuencia. Para comprobar si se presiona el botón se utiliza la siguiente línea
if (digitalRead (12) == BAJO)
Aquí la nueva función es la función digitalRead () , esta función leerá el estado de un pin digital y regresará HIGH (1) cuando el pin esté recibiendo algo de voltaje y regresará bajo LOW (0) cuando el pin esté conectado a tierra. En nuestro hardware, el pin estará conectado a tierra solo cuando presionemos el botón, de lo contrario será alto ya que hemos usado una resistencia pull-up. Entonces usamos la instrucción if para verificar si se presionó el botón.
Una vez que se presiona el botón, ingresamos al bucle infinito while (1) . Aquí es donde comenzamos a parpadear los LED en secuencia. A continuación se muestra un ciclo while infinito y todo lo que esté escrito dentro del ciclo se ejecutará para siempre hasta que se rompa; se utiliza la declaración.
whiel (1) {}
Dentro del infinito mientras comprobamos el estado del segundo interruptor que está conectado al pin 11.
Si se presiona este interruptor, el LED parpadea en una secuencia en particular, de lo contrario, lo parpadea en otra secuencia.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); retraso (100); } para (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Para hacer parpadear el LED en secuencia, usamos nuevamente el bucle for , pero esta vez usamos un pequeño retraso de 100 milisegundos usando la función delay (100) para que podamos notar que el LED se eleva. Para hacer que solo un LED brille a la vez, también usamos otro bucle for para apagar todos los LED. Entonces encendemos un LED, espere por un tiempo y luego apagamos todos los LED, luego incrementamos el conteo, enciende el LED, espere un tiempo y el ciclo continúa. Pero todo esto sucederá mientras no se presione el segundo interruptor.
Si se presiona el segundo interruptor entonces cambiamos la secuencia, el programa será más o menos el mismo esperado para la secuencia de la cual se enciende el LED. Las líneas se muestran a continuación, intente echar un vistazo y averiguar qué se ha cambiado.
else {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); retraso (100); } para (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Sí, se ha modificado el bucle for . Anteriormente hicimos que el LED se iluminara desde el número 2 y hasta el 9. Pero ahora vamos a comenzar desde el número 9 y disminuir hasta el 2. De esta manera podemos notar si el interruptor está presionado o no.
Configuración de hardware para secuencia de LED parpadeantes:
De acuerdo, suficiente de toda la parte de teoría y software. Consigamos algunos componentes y veamos cómo se ve este programa en acción. El circuito es muy simple y, por lo tanto, se puede construir fácilmente en una placa de pruebas. Pero he soldado el LED y los interruptores en la placa de perforación solo para que se vea ordenado. La placa de perforación que soldé se muestra a continuación.
Como puede ver, tenemos los pines de salida del LED y el interruptor sacados como pines del conector. Ahora usamos los cables del conector hembra a hembra para conectar los LED y los interruptores a la placa LaunchPad MSP430 como se muestra en la siguiente imagen.
Subiendo y trabajando:
Una vez que haya terminado con el hardware, simplemente conecte su placa MSP430 a su computadora y abra Energia IDE y use el programa que se proporciona al final de esta página. Asegúrese de que la placa correcta y el puerto COM estén seleccionados en Energia IDE y haga clic en el botón Cargar. El programa debería compilarse correctamente y, una vez cargado, se mostrará "Carga completada".
Ahora presione el botón 1 en la placa y el LED debería encenderse en secuencia como se muestra a continuación
También puede mantener presionado el segundo botón para verificar si se está cambiando la secuencia. El funcionamiento completo del proyecto se muestra en el video a continuación. Si está satisfecho con los resultados, puede intentar hacer algunos cambios en el código, como alterar el tiempo de retardo, cambiar la secuencia, etc. Esto le ayudará a aprender y comprender mejor.
Espero que hayas entendido el tutorial y hayas aprendido algo útil con él. Si ha tenido algún problema, no dude en publicar la pregunta en la sección de comentarios o utilizar los foros. Encontrémonos en otro tutorial donde aprenderemos a leer voltajes analógicos usando nuestra plataforma de lanzamiento MSP30.