Hola bienvenidos a un nuevo capítulo y vamos a seguir avanzando con nuestro sistema de control de temperatura.
Vamos a agregar en esta oportunidad solamente un pulsador más que es el que vemos aquí pero esto va
a significar algunos cambios porque si no me equivoco no sé si eran de tres o de dos.
Yo tenía el LED así que vamos a hacer lo siguiente Vamos a implementar esta nueva configuración la parte
del en 2003 no cambia nada se mantiene vean esto yo he señalado dos fuentes esta es la fuente de 12
voltios con la que vamos a alimentar el ventilador y esta es la fuente de la placa Arduino es para que
nos quede representada nada más y por ejemplo poder señalar como alimento el DALLAS. 18 20.
Miren está bien colocada la resistencia Pulau no se olviden.
Bueno entonces para agregar este nuevo pulsador yo corrí el LED a deseis para poner este pulsador en
D3 y que me quede el otro de dos.
Les quiero hacer una pregunta por qué hice esto de correr el LED a otro lugar y puse los pulsadores
en D2 y D3
exacto por qué necesito dejar los pulsadores en los pines que tienen interrupciones.
Esa es la idea vamos rápidamente al código y veamos que tenemos por hacer el código y lo tengo acá abajo.
Voy a dejar esto a mano porque quiero corroborar los pines.
Bueno ustedes vean que cada vez que vamos a tener un capítulo al sistema de control temperatura yo le
voy cambiando el nombre.
Esto no lo tienen que hacer ustedes yo lo hago de esta manera porque voy haciendo proyectos nuevos para
poderle dejar a ustedes una copia una fotografía de esta instancia del código para que capítulo a capítulo
vayan teniendo de donde inspirarse y de donde copiar algo que no les quede claro no es necesario que
ustedes lo hagan así ustedes simplemente al mismo proyecto pueden ir mejorándolo cambiándole paso a
paso como lo vamos a hacer acá.
Bueno entonces teníamos algunas modificaciones.
No sé si se las hice leer esta en 6 me fijo acá viene el LED lo tenemos en 6 tenemos botón.
Bueno acá vamos a poner fijense ya se van a dar cuenta para qué son los botones con el solo hecho de
leer.
Miren nos va a servir un botón para bajar la temperatura límite y otro botón para subirla.
Entonces vamos ya de entrada a crear este botón se va a llamar botón down
y este lo tenemos en el PIN 2.
Luego vamos a crear otro botón que es el que vamos a agregar a este.
Probamos con un solo botón botón App para subir 3 ya tenemos los dos botones definidos que me está faltando
por lo menos chequear el ventilador el ventilador sigue en de5 así que es correcto tenerlo a cada 5
y me falta corroborar y miren acá no lo tengo.
Esto es muy importante.
El PIN del 18 B20 al PIN 7 vamos a agregarlo por acá de paso miren no se preocupen ya vamos a hacer
un capítulo van a ver que más adelante hay un capítulo de Y si era este programa para diseñar circuitos
y placas por acá les va a interesar muchísimo.
Error error estuvo acá.
Bueno
ahora sí de 7.
Bueno habiendo corregido esto en el esquema voy a pasar a corregirlo acá
listo.
Los dos botones el ventilador y vamos a empezar a trabajar con esto
nosotros teníamos en el Luv esto de que si la temperatura límite era superior a la deseada arrancaba
el ventilador o si no se detenía.
Entonces vamos a empezar a darle un poco de orden al código vamos a crear una función le parece que
se va a llamar
hoy no devuelve nada por eso empieza a Convair esta función y se va a llamar.
Veamos qué nombre le vamos a dar.
Seguro que ver nombres más apropiados vamos a poner ventilador acción y yo sé que ahí adentro voy a
juntar todo el código referente a las comparaciones de temperatura y la lógica de lo que tienen que
hacer o no el ventilador en función de la temperatura y eso lo tenemos acá
perfecto.
Estas líneas ya no lo voy a necesitar entonces en el blog voy a tener que llamar a buen tirador aunque
me faltó una erre ventilador acción.
Bien hasta ahí el código va a seguir funcionando de la misma manera que lo hacía hasta recién
bueno vamos en el ZetaP nos estaría faltando ahora declarar las interrupciones como hacíamos esta declaración
como lo hacíamos.
Y miren yo esto no lo quiero ocultar porque todos los desarrolladores hacemos esto abrir algo inspirarnos
y refrescar la memoria.
Así que abrí.
Y bueno el ejemplo que hicimos de interrupción externa cuando aprendimos a usar los botones porque necesitaba
refrescar se declaraba como salida se declaraba como entrada hacía falta declararlo como entrada o simplemente
incluía la interrupción.
Bueno ahora refresco Ben necesitaba primero declararlo como imput chulapa porque quiero aprovecharme
de la resistencia interna entonces acá le vamos a poner un botón
AFP y cómo lo iba a cómo iba a activar la interrupción de la siguiente manera.
Para esto copiar y pegar sí está bien.
Por ahí hacer un curso completo o aprender viendo un código completo pegado.
Obvio no nos sirve de mucho pero no.
O sea buscar en Google buscar fuentes de información inspirarse.
De eso se trata de desarrollar.
Bueno entonces activa la interrupción.
Para qué botón iba a ser para botón App
a qué función vamos a aullaba a llamar.
Todavía no la he creado pero le vamos a decir sube límite y cuando quiero detectar o cuando quiero que
se ejecute esa interrupción ante la caída del pulso o sea cuando se presiona el botón bueno ya lo hicimos
para el que sube la temperatura.
Ahora vamos a hacerlo para el botón que baja la temperatura botón Down otro botón down a Caste y activando
la resistencia Pulau y de Miaka vamos a activar la interrupción
qué función va a llamar todavía no creada baja límite.
Bueno quiero ir probando a ver si tengo algún error sí subir claro me va a dar que estas funciones no
han sido creadas todavía.
Bueno me tomó unos segundos para que nos quede ya como enseñanza que buena práctica vamos comentando
un poco el código definición de pines estas son variables globales código activo puerto serial
finde y ventilador como solía
luego
tenemos comentado el código esto que está acá es algo que yo me copié y pegué porque lo vamos a usar
en algún momento y no quería que se me perdiera obviamente de memoria esto no me lo iba a acordar así
que lo tengo ahí preparado para usarlo dentro de poco.
Sigo.
Bueno qué nos falta crear las funciones que suben y bajan la temperatura límite.
Entonces vengan conmigo y les vamos a crear por acá abajo hoy sube límite y lo vamos a poner de la siguiente
manera cuando se ejecute esta función quiero que límite sea igual al límite +1 que aumente de uno en
uno.
No creo que tenga mucho sentido de hacerlo de a medio grado.
Eso sería medio exagerado pero pero pero algo que debemos saber es que esto lo puede escribir de manera
abreviada como límite.
Más que problema teníamos con estas funciones cuando pulsaba el botón lo que puede pasar es que me genere
falsos incrementos por el ruido se acuerda cómo lo hacíamos.
Miren
acá está se acuerdan.
Con esto calculábamos cuánto tiempo había pasado desde el clic anterior.
Entonces esta impresión no la necesito ahora sí me voy a traer esta parte que capturaba con milis cuánto
tiempo había pasado desde el clic anterior que le habíamos hecho a sus límites.
Como tenemos dos botones lo propio va a ser que tengamos dos diferencias una diferencia app un tiempo
anterior al tiempo anterior app.
Por ende voy a tener que crear acá dos variables nuevas van a ser gran Longa porque eran números largos
el tiempo anterior a un tiempo anterior Pappa bien y la otra era tiempo
y la otra era diferencia diferencia diferencia APP.
Y como ya sé por adelantado que voy a necesitar esto mismo pero Dawn ya la hago y la dejo lista esta
listo.
Entonces de esta manera me aseguró que no voy a tener ese rebote por ahí.
Entonces ahora puedo decir si diferencia App
es mayor a 500 milisegundos.
Con esto se eliminó toda posibilidad de que me cuente cuando tengamos un ruido que aumente el límite
en uno.
Cómo quiero ir viendo por ahora cómo aumenta ese límite.
Vamos a ser serios el punto Prin ln y vamos a decir
límite
Mastering límite perfecto.
Copie esta función entera la voy a duplicar acá abajo y la voy a renombrar.
Esta se llamará baja al límite y vamos a cambiar todos los Japa por Down.
Tiene sentido ahí.
Espero no olvidarme de nada si no me voy a enterar dentro de un rato.
No sé qué me pasa con esta lista imprime el límite.
Será que esto va a funcionar probábamos límite dice que no está declarada y es porque no se llama límite
se llama temperatura ventilaba activado.
Temperatura límite.
Entonces tenemos que corregir acá acá.
Ahí y la temperatura límite ahora se tiene que anda grabando
lo subí a la terminal
el ventilador permanece desactivado.
Voy a presionar uno de los pulsadores
quizás en medio grande me doy cuenta si sube perfectamente.
Es medio grande.
El valor que tenemos en el anti rebote vamos a poner a doscientos cincuenta coma doscientos cincuenta.
Bueno grabo espero y vamos a probar a ver cómo como nuestro ya andan los dos pulsadores pero me doy
cuenta de otro error groso error que es que en Baja límite tengo más más ambos pulsadores sumaban eso
está mal grabo
miren ahí tengo la temperatura entonces a ver no está descendiendo.
Bueno ahora que estoy por debajo de la temperatura que está midiendo arranca de inmediato el ventilador
y en cuanto me paso.
Bueno ahí se frena cuando estoy tocando con la mano para seguir probando el sistema y anda de 10.
Bueno hay algo que no me gusta mucho a mí aparte.
La verdad es que quiero enseñarles algo más
y es esto.
Miren este club está constantemente midiendo y constantemente enviándome lo que está sucediendo ahora
que es molesto.
Es necesario medir la temperatura.
Semejante cantidad de veces.
Entonces vamos a ver ahora cómo se puede utilizar milis para que estas operaciones se ejecuten.
No sé.
Cada un segundo cada dos segundos.
Opción A que solo la quiero ver en esta prueba que es para enseñarles lo que no hay que hacer.
La opción A y lo más fácil.
Hablando en serio ahora lo más fácil sería poner acá un dilema mil entonces genera una espera de un
segundo a ver si esto funciona.
Bravo
ya va arrancar.
Bueno ahora está mucho más coherente más tranquilo.
Bueno obviamente las interrupciones funcionan y no se atascan por ese día.
Pero bueno ahora está mucho más tranquilo este sistema.
Pero ese día ahí está generando que durante un segundo el microcontrolador esté completamente ocupado
generando una espera es un desperdicio total de ocupar un micro un segundo para que solamente espere
es un tiempo muy valioso que de seguro voy a necesitar para otras tareas entonces entonces lo propio
sería lo siguiente Voy a crear momentãneamente acá una variable Long Contador 1.
Ya sé que se estarán sorprendiendo por el lugar.
Igual a cero a donde estoy creando yo provisoriamente la kreo acá porque voy a trabajar justo aquí abajo
es una variable global.
Cuando yo lo escribo acá es lo mismo que escribirla acá donde tienen que ir las variables globales y
acá lo voy a terminar poniendo momentáneamente yo lo hago acá cerquita de donde estoy trabajando porque
me queda más cómodo está a la misma altura así que pueda funcionar igual como variable global.
Bueno entonces cómo puedo hacer voy a decir lo siguiente miren si milis se acuerdan que era milis me
decía en milisegundos el tiempo que lleva el arriano el arruino funcionando.
Entonces si milis menos Contador uno es mayor que mil milisegundos
quiero que ejecute todo esto que tengo acá adentro ya saqué el delay.
Vamos a intentar esto ahí está y lo único que nos resta es que lo podamos hacer una buena técnica es
hacerlo siempre al principio pero no olvidarnos porque si no esto no andaría.
Es decir que si se supera esto o sea que hay que ejecutarlo decir
Contador uno igual a mí Glitz bueno analicemos un poco esto para que quede claro porque sé que a priori
puede parecer complejo como ordenarlo ahí razonemos lo empieza diciendo Contador 1 que es nada más que
una variable que yo voy a ir usando para llevar la cuenta de cuánto tiempo ha pasado desde que arrancó
esto y si me toca o no me toca ejecutar esta parte lo que voy a hacer es pensemos arranca valiendo cero
entonces digo para la primera vuelta Civilis milis.
Supongamos que en la primera vuelta vale recuerdan que milis arranca en cero y empieza a contar milisegundos
milisegundos y que en cuanto se ejecuta de a lo mejor pasaron 10 milisegundos.
Si Contador Civilis menos Contador que cuánto era cero es mayor que mil ejecuto todo el código diez
menos cero es diez.
O sea que no es mayor que mil vamos a la próxima para el próximo blog milis ya va a ir valiendo 100
milisegundos.
Supongamos lo estoy haciendo incrementar mucho más rápido de lo que en realidad es.
Vuelvo a preguntar Todavía no se superó no se ejecuta y así va a llegar un momento que milis va a valer
supongamos mil 100 o mil treinta mil treinta mil treinta menos cero 2030 es mayor que 100 ese número
si bien listo.
Entonces lo primero que va a hacer es agarrar y decir que Contador 1 ahora ya no es más igual a cero
sino que ahora es igual al valor que tiene milis ahora 1030.
Entonces ahora sepamos vamos mentalmente que ahora milis está grabado en Contador unos 1030 me quedó
acá adentro.
Listo se ejecuta toda la función y vuelvo a empezar la pregunta
milis ahora en este segunda vuelta deberá estar valiendo mil
300 mil 300 supongamos menos.
Cuánto valía Contador 1 hora 1030.
Porque gracias a esta línea 1300 menos 1030 es mayor a mil no.
Y así va a seguir hasta que en algún momento esto va a valer.
Supongamos 2 mil 60 y ahora si va a ser mayor el ciclo se repite y es una manera ésta que parece súper
complicada pero una vez que te acostumbras no cuesta nada y lo que pasa es que es la manera correcta
de ejecutar funciones cada cierto tiempo.
Entonces hoy hemos aprendido a que a controlar dos interrupciones ya nuestra estación de control de
temperatura tiene una capacidad nueva y es la que yo puedo subir miran su bajo o subo la temperatura
el límite y como si esto fuera poco he aprendido a ejecutar una función cada cierto tiempo librándose
totalmente de los delays.
Yo no te digo que hagas del delay un enemigo porque se usa pero lo usemos lo menos posible sobre todo
para cuando queremos generar funciones periódicas que se repitan cada cierto tiempo.
No al Dalai.
Sí al milis.
Bueno nos vemos la próxima los espero.