Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Pulsadores con clase - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 17 de febrero de 2023 por Juan Luis C.

113 visualizaciones

Descargar la transcripción

Hola, muy buenas. La práctica de hoy se llama pulsadores con clase y en ella 00:00:00
exploraremos nuevas características de los pulsadores y a la vez aprenderemos 00:00:04
nuevos elementos de programación. Pero antes de explicar detalladamente en qué 00:00:09
consiste esta práctica voy a hacer unas cuestiones sobre la práctica anterior 00:00:13
de pulsadores. Para ello entraré en Tinkercad, en la práctica que tenemos de 00:00:17
pulsadores. Aquí la tenemos. En esta práctica por defecto el led primero 00:00:21
aparece apagado y cuando pulsamos se enciende, mientras que en los dos 00:00:27
anteriores funciona justamente el revés. Están encendidos por defecto y si 00:00:31
pulsamos se apaga. La cuestión es la siguiente. ¿Podemos modificar el código 00:00:36
para que el tercer pulsador funcione como el primero? La respuesta obviamente 00:00:40
es sí. Vamos a verlo. Vamos a hacer el texto más grande y fijaros, nos vamos a 00:00:44
centrar en el tercer pulsador, este de aquí abajo. Una solución posible es 00:00:48
crearnos una función que devuelva el valor adecuado del pulsador. En este caso 00:00:53
esta función, a diferencia de todas las que nos hemos hecho anteriormente, va a 00:00:57
devolver un dato de tipo entero. Por eso la primera palabra que ponemos es int. 00:01:01
A continuación pondremos el nombre de la función. Yo le voy a dar el nombre leerPulsador. 00:01:06
Esta función va a necesitar un parámetro de tipo entero que es el 00:01:10
pin del pulsador que vamos a leer y como siempre lo que haga la función lo 00:01:15
pondremos entre llaves. Vamos a aprovechar esta línea de código que 00:01:20
tenemos aquí y nos la vamos a llevar aquí dentro de la función. Lo único que 00:01:23
cambiamos este pinPulsa, que aquí no tiene sentido, por pinPulsador. A 00:01:27
continuación miraremos el nivel de ese valor. Si el pin resulta que está a nivel 00:01:32
alto entonces nosotros devolveremos un valor bajo y si está a nivel bajo 00:01:36
nosotros devolveremos un valor alto. Esto lo podemos hacer con una estructura de 00:01:42
programación, el famoso if en inglés. Para realizar un código condicional en C 00:01:47
tendremos que utilizar la palabra reservada if y entre paréntesis poner la 00:01:53
condición. En este caso preguntaremos si val es igual a high. Fijaros que el 00:01:57
operador de comparación no es un igual sino dos iguales juntos. Esto es muy 00:02:02
importante. Si el valor es alto la función tendrá que devolver un valor 00:02:06
bajo y esto se hace con la sentencia return. Fijaros que esta estructura es 00:02:10
muy parecida al bucle while que ya empleamos en otra práctica. Mientras se 00:02:15
cumpla la condición se haría lo de dentro. En este caso si lo de dentro sólo 00:02:20
se tiene que hacer una vez se pone if. Si se cumple la condición se hace lo de 00:02:24
dentro. La sentencia return devuelve el valor de la función y termina la 00:02:28
función. Aunque hubiera cosas por detrás si se ejecuta esta línea se acaba la 00:02:33
función y se devolvería lo. ¿Y qué pasa si en lugar de estar a nivel alto está a 00:02:38
nivel bajo? Es decir si es el otro valor posible de los dos que tenemos. Pondríamos 00:02:42
la palabra else y dentro de else return high. En definitiva juntas leemos el 00:02:46
valor. Si ese valor está a nivel alto nosotros decimos que lo ponga a nivel 00:02:52
bajo y si no que lo ponga a nivel alto. Bueno y ahora tendríamos que venir a 00:02:55
nuestro programa principal y decir que la variable val va a valer lo que nos 00:02:59
diga la función leerPulsador y en este caso el parámetro que le tenemos que 00:03:04
poner aquí es el pinPulsa. Si ejecutamos ahora vemos como por 00:03:10
defecto está apagado el led y sólo se enciende cuando pulsamos tal y como 00:03:17
queríamos. Bien en este ejemplo podemos ver cómo podemos modificar el 00:03:21
comportamiento de un circuito a través de software de una manera relativamente 00:03:25
sencilla. Ahora la pregunta que os voy a hacer es ¿yo podría hacer el botón que 00:03:28
cuando pulso una vez se encienda y aunque suelte se quede encendido cuando 00:03:33
pulse la siguiente vez se apague y así sucesivamente? Pues sí claro que lo 00:03:38
podríamos hacer pero ojo aquí hay que tener en cuenta varias cosas. Una 00:03:42
realmente las actuaciones serían cuando pasa de un nivel alto a un nivel bajo y 00:03:46
eso lo tendríamos que hacer almacenando el valor anterior en una variable y 00:03:50
comprobando si ha cambiado y luego tendríamos que tener otra variable para 00:03:54
el estado que queremos del led si encendido o apagado. Aquí vemos que esto 00:03:58
se nos empieza a complicar y tendríamos que tener múltiples variables para 00:04:02
controlar el estado del pulsador y si yo ahora os pregunto ¿y si quisiera tener un 00:04:05
pulsador de tal manera que sólo se enciende el led cuando lo mantengo 00:04:10
pulsado tres segundos? ¿se podría hacer? Pues también pero otra vez de nuevo 00:04:14
tendríamos que tener una serie de variables para controlar el estado del 00:04:17
pulsador, ir contando el tiempo que va pasando desde que pulsamos la primera 00:04:21
vez, etcétera, etcétera. Como vemos todo esto se complica simplemente para un 00:04:25
pulsador pero afortunadamente hoy vamos a ver que hay una serie de técnicas que 00:04:29
me permite manejar un pulsador o cualquier otro elemento del circuito 00:04:34
gracias al trabajo que han hecho otras personas previamente. Ahora presta 00:04:38
atención porque para realizar esta práctica tendrás que hacer lo siguiente 00:04:42
En este Tinkercad yo he entrado como un alumno más de una clase. Para esta 00:04:45
práctica tendré que venirme aquí a clases 00:04:51
entrar en la clase en la que estoy registrado, pinchar en la práctica 00:04:55
correspondiente y pulsar en este botón para copiar el proyecto que me ha dejado 00:05:02
ya el profesor. A continuación le voy a poner un nombre adecuado quitándole el 00:05:07
de copy off. Lo dejamos con pulsadores con clase. Al igual que el resto de las 00:05:11
prácticas si lo estáis haciendo con un compañero poner el nombre de las dos 00:05:16
personas que lo estáis haciendo y no olvidéis de dar a intro. Ahora vamos a 00:05:20
ver el código. Lo primero que nos llama la atención es que hay muchísimas líneas 00:05:25
escritas. Estas líneas de código nos van a permitir programar con una 00:05:29
metodología que se conoce como programación orientada a objetos. Con 00:05:34
esta metodología se pretende tener componentes de código que se pueden 00:05:38
manipular como si fuera un objeto. Voy a poner un ejemplo. Si yo tuviera un 00:05:42
componente de código para simular un coche puedo esperar de ese componente, de 00:05:48
ese objeto, que tenga una serie de propiedades como por ejemplo el color 00:05:53
como por ejemplo el número de puertas y una serie de métodos es decir de 00:05:57
funciones como acelerar, frenar, girar a la izquierda, girar a la derecha, dar 00:06:02
marcha atrás. A continuación vamos a ver cómo podemos aplicar esta metodología a 00:06:08
este ejemplo concreto. Pues bien todo lo que tenemos desde esta línea para arriba 00:06:14
es el código necesario para poder tener objetos que simulen un pulsador. Todos 00:06:19
esos objetos van a pertenecer a la clase Button. Os adelanto que en la mayoría de 00:06:24
las aplicaciones ni siquiera llegamos a ver el código de la clase. Cuando 00:06:30
utilicemos directamente Arduino todo esto no lo veremos. Irá puesto en un 00:06:34
fichero aparte y no estará dentro de nuestro programa principal. Tinkercad es 00:06:38
una plataforma de simulación de Arduino muy buena pero tiene un pequeño fallo. 00:06:43
Hay clases que sí que puedo utilizar, esto lo hacemos aquí en las bibliotecas, 00:06:47
sin necesidad de incluir el código dentro del programa principal. Pero hay 00:06:51
otras clases que no podemos utilizar en forma de librerías independientes sino 00:06:56
que tenemos que incrustar el código dentro del programa principal. En 00:07:01
cualquier caso yo lo que he hecho ha sido poner todo el código, lo he copiado de 00:07:06
alguien que lo ha hecho y a continuación pues empezará nuestra aplicación que es 00:07:10
donde nos tenemos que preocupar. Pues bien vamos a ver cómo programaríamos esto. 00:07:15
Para los LEDs tendremos que crearnos una variable como siempre pinLEDIZQ 00:07:20
de izquierda y le asignamos el valor 11 que es al que está conectado el LED y 00:07:25
ahora para nuestro pulsador de la izquierda nos crearemos un objeto de 00:07:31
tipo Button y eso se hace poniendo el tipo de datos, que no es nada más que la 00:07:36
clase, el nombre que le queremos dar al objeto, por ejemplo ButtonIZQ y 00:07:41
llamando al constructor de la clase. El constructor de una clase no es nada más 00:07:47
que una función especial que se emplea cuando se crea el objeto. En el 00:07:51
constructor de la clase Button podemos utilizar tres parámetros. El primer 00:07:56
parámetro es el pin al que tenemos asociado nuestro pulsador, en este caso 00:08:00
sería el 12. El segundo parámetro que necesita este constructor es el estado 00:08:06
en el que está el pulsador cuando pulsamos, en este caso sería high, es 00:08:11
decir, cuando yo aprieto el pulsador el valor que se lee es alto. Y admite un 00:08:16
tercer parámetro que es opcional que hace referencia a si estamos utilizando 00:08:21
o no la resistencia de pull-up que nos pone Arduino. En este caso como no la 00:08:24
estamos utilizando lo podemos dejar sin poner. Ahora en el setup tenemos que 00:08:29
utilizar la función pinMode para indicar que el pin del LED izquierdo se utiliza 00:08:34
en modo salida. Con el pin que utilizamos para el objeto ButtonIZQ no 00:08:40
es necesario inicializarlo puesto que se encarga de hacerlo el constructor. Yo 00:08:46
todo esto lo sé porque quien ha hecho todo este código, la clase para poder 00:08:50
utilizar el objeto, ha escrito una pequeña referencia indicando cómo 00:08:55
utilizar este código. Bien, volvamos al código. Ya hemos inicializado tanto el 00:09:00
LED como el objeto para el pulsador izquierdo. Ahora vamos a ver cómo podemos 00:09:05
emplearlo. Si volvemos a la referencia de la clase Button podremos ver que hay que 00:09:10
llamar a la función listen y esto lo hacemos poniendo el nombre del objeto 00:09:17
punto y ahora el nombre del método que no deja de ser una función del objeto 00:09:22
que es listen. De esta manera internamente el objeto va a ver en qué 00:09:28
estado se encuentra el botón. Ahora podemos utilizar la función isPress del 00:09:33
objeto ButtonIZQ que nos dice si el pulsador se encuentra presionado o no. 00:09:38
Esta función devuelve true en caso de ser verdadero o false en caso de ser 00:09:43
falso y esto lo podemos utilizar dentro de una estructura de tipo if para 00:09:49
realizar una acción u otra. Vamos a verlo con un ejemplo. If, entre paréntesis, 00:09:54
ponemos el resultado de la instrucción. En este caso será ButtonIZQ.isPress. 00:09:59
Si esto es verdadero escribiremos sobre el pin del LED 00:10:06
el valor de alto y si no, y eso lo hacemos con la sentencia else, escribiremos el 00:10:13
valor de bajo. 00:10:21
Vamos a probarlo. 00:10:24
Fenomenal, aquí lo tenemos. Bueno, esto que es tan sencillo y bastante intuitivo 00:10:27
vemos que ocupa varias líneas. Podemos conseguir reducir el número de líneas 00:10:32
utilizando el operador ternario del lenguaje de programación C. Este operador 00:10:36
sirve para asignar un valor a una variable en función de si se cumple una 00:10:42
condición o no. Vamos a verlo con un ejemplo. Nos vamos a crear una variable 00:10:47
que la vamos a llamar PALIZQ. A continuación ponemos el igual y ahora 00:10:51
utilizamos el método de antes para preguntar si está presionado. A 00:10:56
continuación una interrogación y el valor que queremos asignar a la variable 00:11:01
en caso de ser verdadero lo anterior. Seguido de dos puntos y el valor que 00:11:05
queremos asignar a la variable en caso de que sea falso lo anterior. Y por último 00:11:10
el punto y coma, no se nos puede olvidar. Y ahora vamos a utilizar esta función 00:11:14
de aquí, DIGITALWRITE, y le vamos a asignar el valor de la variable. Por último 00:11:20
elimino todo esto, que ya no necesitamos. Vamos a probar cómo funciona. 00:11:26
Vemos que efectivamente hace lo que nosotros queremos. Bueno, a lo mejor para 00:11:32
conseguir este efecto no necesitábamos realmente la clase. ¿Pero qué pasa si, por 00:11:38
ejemplo, queremos encender o apagar el LED alternativamente cada vez que hago 00:11:42
una pulsación sobre el pulsador? Pues bien, este objeto tiene un método que se 00:11:47
llama ONPRESSASTAGAL que me hace este trabajo. Fijaros que lo único que he 00:11:52
hecho ha sido sustituir el nombre del método anterior por este nuevo. Vamos a 00:11:57
ver cómo funciona. 00:12:01
Cliqué una vez y se enciende y aunque lo suelte sigue encendido. Cuando le vuelva 00:12:04
a dar se apagará y aunque suelte sigue apagado. Lo vuelvo a dar, se vuelve a 00:12:09
encender y así sucesivamente. Fijaros de qué forma más fácil lo hemos conseguido. 00:12:13
No tenemos que estar guardando los valores en variables ni nada como 00:12:18
comentamos al inicio del vídeo. Y eso es porque estamos utilizando un objeto de 00:12:22
una clase que alguien se ha encargado ya de hacer todo ese trabajo sucio. 00:12:28
Vamos a ver ahora cómo podríamos utilizar el pulsador del centro donde 00:12:33
utilizamos un circuito de pull-up. Pues igual que antes crearemos una variable 00:12:38
para el led del centro. La vamos a llamar pinLedMid y le asignamos el valor de 9. 00:12:43
Vamos a crearnos un nuevo objeto de la clase Button para el pulsador del centro. 00:12:51
Asignamos el pin 10 y en este caso sabemos que cuando pulsamos 00:12:57
verdaderamente se pone a nivel bajo. Al revés que en el circuito de pull-down. 00:13:03
Ahora nos tenemos que acordar de poner el led del medio en modo salida 00:13:09
y haremos algo parecido a lo que tenemos aquí. Lo vamos a copiar, lo vamos a pegar 00:13:16
pero en este caso estamos utilizando el botón del medio. Tengo que cambiarlo en 00:13:22
todos los lados, no se me puede olvidar ninguno. Bien, vamos a probarlo. 00:13:29
Bueno, aquí nos aparece un error típico de programación porque se me ha olvidado 00:13:34
cambiar el nombre aquí arriba. Lo ejecutamos y vamos a ver si funciona. 00:13:38
Efectivamente cuando pulsamos se enciende, cuando volvemos a pulsar otra 00:13:43
vez se apaga y así alternativamente. ¡Perfecto! 00:13:48
¿Y qué tenemos que hacer para encender el led sólo cuando mantenemos pulsado el 00:13:53
pulsador un determinado tiempo? Por ejemplo 3 segundos. Bien, pues esta clase 00:13:58
nos proporciona un par de métodos para ello. El primero, Set Hold Delay, nos permite 00:14:04
especificar el tiempo que deseamos que transcurra hasta que se encienda el led. 00:14:10
Y eso lo hacemos empleando nuestro objeto, por ejemplo el del medio, el método y 00:14:14
indicando un parámetro que es el tiempo en milisegundos, por ejemplo 3000 00:14:19
milisegundos para que sea 3 segundos. Y luego aquí tendremos que utilizar el 00:14:24
método Is Hold. Vamos a probarlo. Pulso y no se enciende. Vuelvo a pulsar, sigue sin 00:14:29
encenderse, pero si ahora mantenemos pulsado durante 3 segundos veremos cómo 00:14:36
se enciende el led. Bueno, y vamos con el último para completar la práctica de hoy 00:14:42
en el que nos vamos a crear una tercera variable para el led. En este caso la 00:14:46
vamos a llamar DCH. Le vamos a asignar el valor de 7. Nos vamos a crear otro botón, 00:14:51
en este caso pues también la llamaremos botón DCH, que no se nos olvide como 00:14:57
antes cambiar el nombre aquí. Le asignamos su pin que es el 8. 00:15:04
Y en este caso necesitamos un tercer parámetro para indicar al objeto que va 00:15:09
a utilizar la resistencia de pull up que pone arduino. Y eso lo hacemos poniendo 00:15:15
el valor de true, de verdadero. A continuación pondremos 00:15:21
el pin de salida para el led correspondiente. 00:15:26
Y por último vamos a utilizar código similar a este pero con el botón 00:15:35
de la derecha. Tengo que cambiarlo en todos los lados, que no se me olvide 00:15:43
ninguno. Si no, no va a funcionar como deseamos. 00:15:49
Podemos darle un tiempo de espera distinto al anterior. Por ejemplo aquí le 00:15:53
vamos a decir que espere tan solo un segundo para que se enciende. Pero aquí 00:15:59
nos tenemos que acordar de que este es nuestro botón DCH. Vamos a ver si es verdad. 00:16:04
Pulsamos y hasta que no alcanza el segundo no se enciende el led. Aquí fijaros 00:16:08
cómo tarda bastante más, hasta que no alcanza el tiempo de los tres segundos. 00:16:14
Bueno y esto es todo en esta práctica. Ahora esto a vosotros, a ver qué tal lo 00:16:19
hacéis. Venga, ánimo. 00:16:23
Valoración:
  • 1
  • 2
  • 3
  • 4
  • 5
Eres el primero. Inicia sesión para valorar el vídeo.
Idioma/s:
es
Autor/es:
Juan Luis Carrillo Arroyo
Subido por:
Juan Luis C.
Licencia:
Reconocimiento - Compartir igual
Visualizaciones:
113
Fecha:
17 de febrero de 2023 - 9:06
Visibilidad:
Público
Centro:
IES EL ALAMO
Duración:
16′ 25″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
223.27 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid