{"id":3026,"date":"2021-01-19T23:25:22","date_gmt":"2021-01-19T23:25:22","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=3026"},"modified":"2021-12-14T23:32:57","modified_gmt":"2021-12-14T23:32:57","slug":"angry-pomodoro","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/","title":{"rendered":"ANGRY POMODORO"},"content":{"rendered":"\n<h2 class=\"has-small-font-size wp-block-heading\">Proyecto realizado por:<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Sergio Mulas Azabal<\/li><li>Carlos Mariano Garc\u00eda Sanz<\/li><li>David Gonz\u00e1lez Rueda<\/li><li>Gonzalo Lobo Gonz\u00e1lez<\/li><\/ul>\n\n\n\n<h2 class=\"has-light-green-cyan-background-color has-background wp-block-heading\">INTRODUCCI\u00d3N<\/h2>\n\n\n\n<p class=\"has-text-align-left has-white-background-color has-background\">Angry Pomodoro es un dispositivo multifunci\u00f3n que est\u00e1 orientado al uso del estudio como herramienta. Se basa en el sistema Pomodoro que fuerza al estudiante a mantener el tel\u00e9fono m\u00f3vil en desuso durante el tiempo de estudio. Adem\u00e1s, cuenta con una funci\u00f3n alternativa de lamparita con varios modos de iluminaci\u00f3n y un peque\u00f1o detalle a modo de funci\u00f3n de bienvenida. <\/p>\n\n\n\n<h2 class=\"has-light-green-cyan-background-color has-background wp-block-heading\">MATERIALES Y CONEXIONES <\/h2>\n\n\n\n<p>Los materiales utilizados en la totalidad del proyecto son:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU\" alt=\"\" \/><\/figure>\n\n\n\n<p>Las conexiones del Arduino:<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"592\" src=\"https:\/\/lh3.googleusercontent.com\/eDK9hSzovww_FykF7doCjIJ4dILJW4hGMybh3MRUz63s26gr79QPrvgVGJyJdPvX1KbEpnmEXPV4h8urX9FJ80Zro8PJbKTiH5DkZ0l9fMKAlfma90l89uBmzjQqCi_aoa7jPkE\"><\/p>\n\n\n\n<p>Video explicaci\u00f3n sobre el Hardware del Angry Pomodoro:<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Funcionamiento Hardware\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/cOow6G_-WnQ?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"has-light-green-cyan-background-color has-background wp-block-heading\">IMPLEMENTACI\u00d3N <\/h2>\n\n\n\n<h3 class=\"has-vivid-purple-color has-text-color wp-block-heading\"><strong>SISTEMA POMODOR<\/strong>O<\/h3>\n\n\n\n<p>Pomodoro es una t\u00e9cnica de gesti\u00f3n de tiempo utilizada para cualquier tarea. Si bien el proyecto est\u00e1 pensado para estudiantes, se podr\u00eda utilizar en otros \u00e1mbitos de trabajo. Habitual-mente, los periodos de tiempo de esta t\u00e9cnica son de 25 minutos.&nbsp;<\/p>\n\n\n\n<p>Una vez accedido al modo \u2018Pomodoro\u2019 con el pulsador \u2018P0\u2019 y, a trav\u00e9s del pulsador \u2018P1\u2019, haber escogido el n\u00famero de rondas de estudio, se le exige al usuario dejar su tel\u00e9fono en un soporte encima del dispositivo. Esto causa que se active un pulsador (por el peso) que dar\u00e1 comienzo a los 25 minutos.&nbsp;<\/p>\n\n\n\n<p>Si por alg\u00fan motivo el usuario tomase el tel\u00e9fono del soporte antes de que el periodo finalice, se desactivar\u00eda el pulsador, haciendo que el \u2018Angry Pomodoro\u2019 pare el tiempo de estudio. Si se coloca de nuevo el tel\u00e9fono, se reanudar\u00eda el tiempo de estudio.&nbsp;<\/p>\n\n\n\n<p>Como el usuario puede escoger cuantos periodos quiere realizar, entre periodo y periodo se deja un descanso de 5 minutos, en los que el usuario podr\u00e1 tomar el tel\u00e9fono del soporte sin que \u2018Angry Pomodoro\u2019 realice ning\u00fan sonido.<\/p>\n\n\n\n<p>Esto ha sido implementado en c\u00f3digo de la siguiente forma:&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><em>C\u00d3DIGO<\/em><\/h4>\n\n\n\n<p class=\"has-text-align-left\"><img loading=\"lazy\" decoding=\"async\" width=\"261\" height=\"390\" src=\"https:\/\/lh6.googleusercontent.com\/o3bNmrWgqsbWpoh0YLZDc8fcAmjQVzQAlkr7W_uxAMrSfa27QVu8k0pshh6wD2LK34RH711RGBGJN_UFon7NE38Xe3iApOKnLUYlGVfpUsvn1_xIXrc5DmtK6vO15QnBsJdfbSI\"><\/p>\n\n\n\n<p>Existen <strong>variables que ser\u00e1n comunes<\/strong> <strong>a todos los modos<\/strong>. \u00c9stas son:<\/p>\n\n\n\n<p><em><strong>Int state<\/strong><\/em>: el funcionamiento general, al ser una m\u00e1quina de estados, utilizar\u00e1 esta variable. Indica en el modo en el que se encuentra el dispositivo.&nbsp;<\/p>\n\n\n\n<p><em><strong>Int buttonMode<\/strong><\/em>: indica el puerto al que se conectar\u00e1 el pulsador P0. Se trata del puerto 3 ya que, junto al 2, puede gestionar interrupciones.&nbsp;<\/p>\n\n\n\n<p><em><strong>Bool buttonModeSignal<\/strong>: <\/em>en este se almacena el valor que recoge Arduino del pulsador \u2018P0\u2019 cuando se eje-cuta la interrupci\u00f3n.&nbsp;<\/p>\n\n\n\n<p><em><strong>LiquidCrystal lcd:<\/strong><\/em> utilizado para la conexi\u00f3n del LCD al Arduino. Se utilizan los puertos que se definen en el constructor (7 al 12). Se hace uso de una librer\u00eda externa para obtener una capa de abstracci\u00f3n mayor sobre la escritura en el LCD.&nbsp;<\/p>\n\n\n\n<p><em><strong>Int buttonAdd<\/strong><\/em>: hace referencia al puerto en el que se conectar\u00e1 el pulsador \u2018P1\u2019. Est\u00e1 conectado en el puerto 2 porque, como se ha explicado anteriormente, puede gestionar interrupciones. <\/p>\n\n\n\n<p><em><em><strong>Bool<\/strong><\/em><\/em> <strong><em>buttonAddSignal<\/em>:<\/strong> en este se almacena el valor que recoge Arduino del pulsador \u2018P1\u2019 cuando se ejecuta la interrupci\u00f3n.<\/p>\n\n\n\n<p>Las variables dedicadas al funcionamiento del Pomodoro incluyen:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Variables dedicadas al tiempo<\/strong>: son aquellas que se utilizan para la gesti\u00f3n del tiempo de estudio de la t\u00e9cnica Pomodoro. Estas son:&nbsp;<ul><li><em>minsForPomodoro<\/em>: minutos pertenecientes a el periodo de tiempo de estudio. Para comprobar que el c\u00f3digo funciona correctamente, se inicializa a 1, aunque a nivel de ejecuci\u00f3n real, \u00e9sta deber\u00eda inicializarse a 25.&nbsp;<\/li><li><em>studyTime<\/em>: cu\u00e1nto tiempo (en segundos) queda para terminar el periodo de es-tudio (aunque tambi\u00e9n sirve para definir cu\u00e1nto tiempo queda para terminar el periodo de descanso).&nbsp;<\/li><li><em>secCounter y studyMin<\/em>: variables auxiliares utilizadas para la impresi\u00f3n en el LCD del tiempo restante (tanto en el periodo de estudio como en el de descanso).&nbsp;<\/li><\/ul><\/li><li><strong>Variables dedicadas al control de los ciclos de repetici\u00f3n<\/strong>: son aquellas que permiten la gesti\u00f3n de el n\u00famero de rondas de estudio que se realizar\u00e1n. Estas son:&nbsp;<ul><li><em>numOfCycles<\/em>: el n\u00famero de ciclos que el usuario realizar\u00e1 de la t\u00e9cnica (que puede escoger en tiempo de ejecuci\u00f3n y que nunca superar\u00e1 de 9 rondas).&nbsp;<\/li><li><em>currentCycle<\/em>: ciclo en el que se encuentra el Pomodoro en el un determinado momento de tiempo.&nbsp;<\/li><\/ul><\/li><li><strong>Variables dedicadas al control de tiempo de ejecuci\u00f3n<\/strong>: son variables que sirven para sincronizar de manera correcta cada cu\u00e1nto se ejecuta el bucle de Pomodoro (se explicar\u00e1 posteriormente). \u00c9stas son:&nbsp;<ul><li><em>msPerLoop<\/em>: n\u00famero de milisegundos entre ejecuciones del bucle. Como se quiere sincronizar a un segundo, se inicializa a 1000.&nbsp;<\/li><li><em>currentTime<\/em>: variable auxiliar para almacenar los milisegundos que han pasado desde el comienzo de la ejecuci\u00f3n (con la funci\u00f3n millis( )).<\/li><\/ul><\/li><li><strong>Variables para el pulsador utilizado como sensor de presi\u00f3n<\/strong>: para evitar tener que comprar un sensor de presi\u00f3n del que no se dispon\u00eda, se utilizar\u00e1 un pulsador. Las variables que lo gestionan son:&nbsp;<ul><li><em>buttonPressure<\/em>: es decir, a que puerto se conectar\u00e1 el pulsador. En el caso del Pomodoro, ser\u00e1 el puerto 13.&nbsp;<\/li><li><em>Active<\/em>: es decir, si est\u00e1 o no pulsado (para controlar que el m\u00f3vil est\u00e1 ejerciendo presi\u00f3n sobre el bot\u00f3n durante el estudio).<\/li><li>&nbsp;<em>Aux<\/em> y <em>AuxInit<\/em>: variables auxiliares que sirven para control de ejecuci\u00f3n (y que algunas partes del c\u00f3digo se ejecuten \u00fanicamente una vez).<\/li><\/ul><\/li><\/ul>\n\n\n\n<p>El funcionamiento de la m\u00e1quina de estados se basa en la implementaci\u00f3n de interrupciones. En Arduino, una interrupci\u00f3n es definida de la siguiente forma.&nbsp;<img decoding=\"async\" width=\"611\" height=\"44.448890686035156\" src=\"https:\/\/lh6.googleusercontent.com\/HclNmTbVtXuK0QYY_SYzDoshPGxVqQUKA_FFWm4GIiHJa5Ars6HatSXYlUPAiVJp7e1grZ4xS02RIa8myYZ6vf9PZiAdO26YdV8bHt-XTQyDU6C9WyAOsmQs2YVEsx7AqD86mGA\"><\/p>\n\n\n\n<p>La funci\u00f3n <em>attachInterrupt<\/em> recibe tres par\u00e1metros: <strong>el bot\u00f3n que genera la interrupci\u00f3n<\/strong><strong><em>, <\/em><\/strong><strong>la funci\u00f3n que se ejecutar\u00e1 <\/strong>y <strong>en qu\u00e9 caso se ejecutar\u00e1 <\/strong>(CHANGE es cuando pasa de HIGH a LOW o de LOW a HIGH).<\/p>\n\n\n\n<p>De esta forma, cuando se presione el bot\u00f3n \u2018P0\u2019, se ejecutar\u00e1 una interrupci\u00f3n, llamando a la funci\u00f3n <em>standPhone()<\/em>. Esta funci\u00f3n es la siguiente:&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/YNtKfbeaQBVydWrlbZATJtElfNzU_CVfgnXMU2nX6afwzzXoTgyjeZgBZu8QTgfPhs9j9gw6WOCvBvmwhbF6Nfjp6DurJpeTdXKkpeyUxeWqVHLSrSCw1dQ5rvADgxrETAVUeus\" alt=\"\" \/><\/figure><\/div>\n\n\n\n<p>Esta funci\u00f3n se encarga de variar el modo, cambiando la variable state. El condicional <em>if(buttonModeSignal == HIGH)<\/em> existe para que s\u00f3lo se ejecute la funci\u00f3n cuando no se tenga el bot\u00f3n presionado y se presione. Si no estuviera, se llamar\u00eda a la funci\u00f3n dos veces (porque la se\u00f1al cambia de LOW a HIGH cuando se presiona y de HIGH a LOW cuando se suelta).&nbsp;<\/p>\n\n\n\n<p>Adem\u00e1s, en esta funci\u00f3n se llama a <em>resetPomodoro()<\/em>, encargada de resetear el dispositivo para que entre en el nuevo modo correctamente.&nbsp;<\/p>\n\n\n\n<p>De esta forma, el bucle principal (loop) se compondr\u00e1 \u00fanicamente de un switch que llamar\u00e1 a las diferentes funciones que implementan los modos. En el caso de que el estado sea 1 (es decir, modo Pomodoro) se ejecuta el siguiente c\u00f3digo en el bucle principal:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/ahlaUDgixQCti_Ig0ebSzv2EucnLCKtJZ61tYKiU1XUcy5XLa2ogovbCSiXuQw3SIV1RXt_RKAzdzXYUOcyl3oi0-qA8qF2aDf4EOEdhHXZzFAdUD6WF02Ue9Zd1opfvWRI8eVE\" alt=\"\" \/><\/figure>\n\n\n\n<p class=\"has-black-color has-text-color\">La funci\u00f3n POMODORO() est\u00e1 fragmentada en diferentes partes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Sincronizaci\u00f3n del bucle de ejecuci\u00f3n con segundos<\/strong><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/WwH4LcyF0Q9-OfqvVkWTP9OxnI27HcSsqDErp7vg1u9NKweDje9mbgoSwAw02uEUGl8g9hzJ33i3e1L3c7BxdieCvRzeLDfxE4Y_QeJI6TZA07Xly06tnPcqys_qvmMNBhukgA4\" alt=\"\" \/><\/figure>\n\n\n\n<p>Este fragmento de c\u00f3digo implementa una sincronizaci\u00f3n a nivel de segundo del bucle de Pomodoro. Se quiere que el bucle ejecute una vez cada segundo. Si por ejemplo se ejecuta la primera iteraci\u00f3n del bucle en 5 milisegundos, no se quiere que se avance en la ejecuci\u00f3n si no han pasado al menos un segundo. No es un m\u00e9todo de sincronizaci\u00f3n exacto, pero el error que se comete es lo suficientemente peque\u00f1o para ser aceptable (ya que el dispositivo no debe de cumplir requisitos de tiempo real). Adem\u00e1s, se lee si est\u00e1 o no activo el pulsador de presi\u00f3n.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Ejecuci\u00f3n del propio Pomodoro<\/strong><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"950\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2021\/01\/foto-950x1024.png\" alt=\"\" class=\"wp-image-3128\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/foto-950x1024.png 950w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/foto-278x300.png 278w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/foto-768x828.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/foto-1425x1536.png 1425w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2021\/01\/foto.png 1560w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/figure>\n\n\n\n<p><strong>[1]<\/strong> El Pomodoro debe de estar ejecut\u00e1ndose siempre que el ciclo en el que se encuentra el dispositivo en ese momento sea igual o menor que los ciclos que ha decidido el usuario.&nbsp;<\/p>\n\n\n\n<p><strong>[2] <\/strong>Comprobaci\u00f3n de que el se encuentre activo el pulsador que mide la presi\u00f3n (es decir, que el dispositivo se encuentre en modo de estudio y que el m\u00f3vil est\u00e9 apoyado) o que el dispositivo se encuentre en modo descanso.&nbsp;<\/p>\n\n\n\n<p><strong>[3] <\/strong>La variable aux marca si se ha pasado de parado a ejecutando para cambiar lo que muestra el LCD. Es decir, que se limpie \u2018PARADO\u2019 y se escriba \u2018EST\u00c1S ESTUDIANDO\u2019.&nbsp;<\/p>\n\n\n\n<p><strong>[4] TimerFunc<\/strong> es una funci\u00f3n que actualizar\u00e1 la cantidad de tiempo que falta para que se acabe el periodo de tiempo que se est\u00e1 ejecutando en ese momento (tanto si se encuentra el usuario en periodo de estudio o de descanso).&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/188V6xOZufagwh4r5-Dc4FaK_vb0pUQVyWqjeO_f8Tjg1tWgTyHq5a6Ifet3ASTs1h-aeVxJ9arurRsdCHZmv_BxS9W0LpWx-oSczTEGzfWYZH7Ranv9OzkgpgZEsHmBwoQmnR0\" alt=\"\" \/><\/figure>\n\n\n\n<p><strong>[5] <\/strong>Condicional que solo se ejecuta para actualizar la funcionalidad del Pomodoro si se ha acabado alg\u00fan periodo, tanto de estudio como de descanso.&nbsp;<\/p>\n\n\n\n<p><strong>[6] <\/strong>Si no se viene de un descanso (es decir que se estaba ejecutando un periodo de estudio) y el ciclo actual no es el final, se debe de comenzar un descanso. Por lo tanto, se limpia la pantalla del LCD, se actualiza el booleano de restTime a true (marcando que se est\u00e1 en un periodo de descanso) y marcando el n\u00famero de minutos de estudio (en una ejecuci\u00f3n real ser\u00edan 5, pero para la realizaci\u00f3n de pruebas se ha definido un descanso de 1 minuto).&nbsp;<\/p>\n\n\n\n<p><strong>[7] <\/strong>Si se vuelve de un periodo de descanso, se imprime en el LCD que se est\u00e1 estudiando y da comienzo a un nuevo ciclo (sumando uno a la variable que marca la variable actual). Si se superasen los ciclos, no se entrar\u00eda en el condicional explicado en <strong>[1]<\/strong>.&nbsp;<\/p>\n\n\n\n<p><strong>[8] <\/strong>Si no se est\u00e1 en periodo de descanso y no se detecta presi\u00f3n en el bot\u00f3n (es decir, que el usuario ha levantado el m\u00f3vil mientras que estaba en periodo de estudio) se para la ejecuci\u00f3n, imprimiendo que se ha parado el tiempo de estudio del Pomodoro.&nbsp;<\/p>\n\n\n\n<p><strong>[9] LCDPrint <\/strong>es la funci\u00f3n encargada de imprimir cuanto tiempo queda tanto del periodo de estudio como del periodo de descanso:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/VbluhMyK-G69CG5o_A1tPmrqIQluYFfzHHPJiYAm-nVB36vfpofecGa-pTVVrVY-hFlaoPE8CVFpf-Ac-AHX_JYG7lr7bf1Pzcvog0_soXFe1oZJfAUqBviCOof8GWw5gUOz9Uo\" alt=\"\" \/><\/figure>\n\n\n\n<p><strong>[10] <\/strong>Por \u00faltimo, cuando se terminan los ciclos que se han decidido, se realiza una operaci\u00f3n con el n\u00famero de ciclos para que no se vuelva a entrar en el Pomodoro. Por \u00faltimo, se imprime que se ha terminado.&nbsp;<\/p>\n\n\n\n<p>Para implementar que el usuario pueda a\u00f1adir ciclos de estudio, se debe de utilizar el pulsador \u2018P1\u2019. Por lo tanto, en <em>setup()<\/em> se debe de inicializar el pulsador como pin de entrada, adem\u00e1s de definir la interrupci\u00f3n que debe de ejecutar.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/iPh0F8e0EmIh6X3EVrFoDmCS8khieGGJh2KHUnOALDRpOba7H4HwEE9sXS5IhN785WqWuFadguCHXh-IClSQl-M2gvXXB6DlQb2ymE4kviOaV2HXbtkoYA0KKDl4YvdxjyTu5BQ\" alt=\"\" \/><\/figure>\n\n\n\n<p>Como la funci\u00f3n que implementa la interrupci\u00f3n en el pulsador \u2018P0\u2019, se llamar\u00e1 a la funci\u00f3n <em>moreCycles<\/em> cada vez que se detecte que se ha presionado el bot\u00f3n \u2018P1\u2019. Esta funci\u00f3n es la siguiente:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/6nwE4QVn_gGPt8cgVyjMAjZyijn8J83G70VPkFo1mKOpbxnNbHQhtRhvRUkdk_w0tfYvecsjBBn2L5flR-cYfg9nHM_CQs9Oagt33Zj7CoD0hsRMRxhL0tzpnLcsAWnl_4mtvp0\" alt=\"\" \/><\/figure>\n\n\n\n<p>Como se ha explicado anteriormente, P1 ejecutar\u00e1 una funcionalidad distinta dependiendo del estado. Para ello, se tiene el switch que var\u00eda seg\u00fan el estado. En el caso de que se encuentre en modo Pomodoro (es decir, state = 1), se a\u00f1ade un ciclo de estudio (hasta un m\u00e1ximo de 9):&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/69gQh6WMlNOggmuMtzojJ1bkT-t7MuPQvyuoBNRot5suKbbXNC_JkAfHDHeLYrEqK9WXpCXKQHARXxqjCmBk6n1EO0mBIgms4TqRpdgExZwh2HS6A_ttqP-Pf_5nKfH0avqPR_o\" alt=\"\" \/><\/figure>\n\n\n\n<h3 class=\"has-vivid-purple-color has-text-color wp-block-heading\">SISTEMA LUCES<\/h3>\n\n\n\n<p>Este modo se basa en el encendido de varios LEDs. Dependiendo del n\u00famero de veces que se presione el pulsador \u2018P1\u2019, se cambiar\u00e1 el modo en el que los LEDs se activen. Se podr\u00e1n iluminar:&nbsp;<\/p>\n\n\n\n<p>Habr\u00e1 varios modos:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Modo 0<\/strong>: apagadas ambas luces. Utilizado para la inicializaci\u00f3n.&nbsp;<\/li><li><strong>Modo 1<\/strong>: ambas luces iluminadas al m\u00e1ximo.&nbsp;<\/li><li><strong>Modo 2<\/strong>: luz roja encendida al m\u00e1ximo.&nbsp;<\/li><li><strong>Modo 3<\/strong>: luz azul encendida al m\u00e1ximo.&nbsp;<\/li><li><strong>Modo 4<\/strong>: ambas luces parpadean altern\u00e1ndose.&nbsp;<\/li><li><strong>Modo 5<\/strong>: ambas luces encendidas a menor potencia.&nbsp;<\/li><li><strong>Modo 6<\/strong>: ambas luces var\u00edan su potencia de forma simult\u00e1nea.&nbsp;<\/li><li><strong>Modo 7<\/strong>: ambas luces cambian su potencia, pero de forma alterna (cuando una brilla m\u00e1s, la otra lo hace menos).<\/li><li><strong>Modo 8<\/strong>: funcionalidad del modo 6, pero m\u00e1s r\u00e1pido.&nbsp;<\/li><\/ul>\n\n\n\n<p>Ya que los puertos var\u00edan su potencia, deber\u00e1n estar conectados a algunos de los puertos PWN.&nbsp;<\/p>\n\n\n\n<p>Esto ha sido implementado en c\u00f3digo:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/l_x3lwCE5fqxCLtezdwKfu6rLN6oEncig_DRTCpjI_5X2OZcHuvhMdro6IHTqfhKo5I-fUnjPpGDp85WcnW2hdbA6nmiL7ZsGIjNcbkmICfzcQVXIMK8E8DmXcY0B4zGhohZa6w\" alt=\"\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/LgFBNoyBA5usn9x-EC3eSdQ8Jv2Mg6XoQCFGn6Se2Jq52fStVs35vyjuXzdnOKn2ob875t37NCE4pk_6iaynhX_IVBL5sGScL7a8gEBGRSuzdZA_pVY9viYHctGFK_hFE5ovLck\" alt=\"\" \/><\/figure>\n\n\n\n<h3 class=\"has-vivid-purple-color has-text-color wp-block-heading\">SISTEMA SALUDO<\/h3>\n\n\n\n<p>El usuario, al presionar el bot\u00f3n \u2018P1\u2019, har\u00e1 que el Angry Pomodoro le salude habl\u00e1ndole y moviendo su cola (a trav\u00e9s de un servo). Se mueve de derecha a izquierda dos veces de forma r\u00e1pida.<\/p>\n\n\n\n<p>Esto ha sido implementado en c\u00f3digo:&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><em>C\u00d3DIGO<\/em><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Variables iniciales: <\/strong>las variables utilizadas para la gesti\u00f3n del saludo son:<img loading=\"lazy\" decoding=\"async\" width=\"289\" height=\"135\" src=\"https:\/\/lh5.googleusercontent.com\/1V-h2h4M4LlQdtDIuHb1Ie3pCNqwptbYnyMcw-7quUWI4KSY-4eM-fTHLVblauutYfRMikpo3uKPQi1KlAtqd0gAI4UYyu92t3GQ63SYbwpPYK-ZPInqZeBbrsEQ0hmDi_3v6g8\"><ul><li><em>Servo servo<\/em>: para manejar el servo, se utiliza la abstracci\u00f3n proporcionada por la cabecera \u201cServo.h\u201d. Se instancia un objeto de tipo Servo que representa el servo conectado.&nbsp;<\/li><\/ul><ul><li><em>Int pos<\/em>: variable que indica el n\u00famero de grados que se mueve el servo.&nbsp;<\/li><li><em>Int hello, helloAux<\/em>: variables utilizadas para evitar los solapamientos de una ejecuci\u00f3n del saludo con la siguiente.&nbsp;<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Inicializaci\u00f3n en <em>setup<\/em>()<\/strong>: la inicializaci\u00f3n se realiza con el siguiente c\u00f3digo. El servo ser\u00e1 conectado al puerto del Arduino 4.&nbsp;<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/NCVYgPo_0gUrAamrr0uKUFm4C4ysBf0MfUWPpIV_9Onr-VhYgR5i0kYYfpuct9eD-Sk0vu7zl3uuE4dlX9kSObFGSaixqFoyWeZUIMTPGmpDQYCjEI156ggT7EA1-FO5F97LWC0\" alt=\"\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Funcionamiento<\/strong>: durante el loop, si la variable <em>hello <\/em>es 0 (es decir, que no se est\u00e1 ejecutando en ese momento la funci\u00f3n de saludo), se llama a la funci\u00f3n <em>cuicui()<\/em>, que implementa el movimiento del servo.&nbsp;<\/li><\/ul>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/7DstlAn8KChvFcmnYE0duqfYXbGfMyoRG1SzSun_nBd1SvTiame2ncTSUREJ0cGieIlDSTwRHMPDF8vAWE4zZmXQECFBF9SQWPwfJl9HwyK_wLXH0o5yAiTIAFf65a0JcxGbxhg\" width=\"834.633757352829\" height=\"426.10580945014954\"><\/p>\n\n\n\n<p>Lo m\u00e1s importante a comentar en la funci\u00f3n es el movimiento que realiza el servo. Se ha implementado mediante la escritura de dos estructuras iterativas <em>for <\/em>que escriben en el servo el \u00e1ngulo de giro que debe tener en un momento de la ejecuci\u00f3n determinada.&nbsp;<\/p>\n\n\n\n<p>Como en los anteriores casos, solo se llamar\u00e1 a la funci\u00f3n <em>cuicui<\/em> de nuevo si no se encuentra en ejecuci\u00f3n en ese momento y se pulsa P1 (captura del c\u00f3digo de <em>moreCycles<\/em>(), funci\u00f3n llamada en la interrupci\u00f3n de P1 y explicada anteriormente).&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/2c506opqbRlb-c1pVH8OB2wSMgImfp-LX7D6iGzyI6Q7nXseNN3pBOLxaQ0_fCdLW-X29a4BmDOfG3eeiIK57gMC7GWWmsuBrCLn04mfz59znmarTuK9xrUit9_oV24J-R92G00\" alt=\"\" \/><\/figure>\n\n\n\n<p>Se invocar\u00e1 a la funci\u00f3n de saludo en el bucle de ejecuci\u00f3n principal de la siguiente forma:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/MTYtfV-JiiRCfcosuDPy1xpmmuzmbMj1qQBTr7S1bOBuuPsu_8syuE43LCsp-owMkUCv2tMO2G8mw7yFwco2eq8VQj4EPu1ZAWElZ4ItKBy7MNy4gjU4tKRyAZyNKRj8WMGHrIg\" alt=\"\" \/><\/figure>\n\n\n\n<h2 class=\"has-black-color has-light-green-cyan-background-color has-text-color has-background wp-block-heading\">C\u00d3DIGO COMPLETO<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int state;\nint buttonMode = 3;\nbool buttonModeSignal = LOW;\n\n\/\/------------------------------------------------------------------------------------------------------------------------------\n\/\/ VARIABLES RELATED WITH POMODORO\n\/\/------------------------------------------------------------------------------------------------------------------------------\n\/\/Set up the LCD\n#include &lt;LiquidCrystal.h&gt;\nLiquidCrystal lcd(7, 8, 9, 10, 11, 12);\n\n\/\/Variables for initial Pomodoro process\nint minsForPomodoro;\nint studyTime;\nint secCounter;\nint studyMin;\n\n\/\/Variables for Cyclic Pomodoro\nunsigned int numOfCycles;\nunsigned int currentCycle;\nbool restTime;\n\n\/\/Variables for time control\nunsigned long msPerLoop = 1000;\nunsigned long currentTime = 0;\n\n\/\/Variable for buttonAdd\nint buttonAdd = 2;\nbool buttonAddSignal = LOW;\nlong debounce;\nlong interruptInit;\n\n\/\/Variable for buttonPressure\nint buttonPressure = 13;\nbool active;\nint aux;\nint auxInit;\nint configPom;\n\n\/\/------------------------------------------------------------------------------------------------------------------------------\n\/\/ VARIABLES RELATED WITH HELLO!\n\/\/------------------------------------------------------------------------------------------------------------------------------\n#include&lt;Servo.h&gt;\nServo servo;\nint pos;\nint hello, helloAux;\n\n\/\/------------------------------------------------------------------------------------------------------------------------------\n\/\/ VARIABLES RELATED WITH LIGHTS\n\/\/------------------------------------------------------------------------------------------------------------------------------\nint contador;\nconst int Azul = 5;\nconst int Rojo = 6;\n\n\nvoid setup(){\n\n\tdebounce = 150;\n\tinterruptInit=0;\n\trestTime= false;\n  \n\tstate = 0;\n\tpinMode(buttonMode,INPUT);\n\tattachInterrupt(digitalPinToInterrupt(buttonMode), standPhone, CHANGE);\n\t\/\/------------------------------------------------------------------------------------------------------------------------------\n\t\/\/ SET UP FOR POMODORO\n\t\/\/------------------------------------------------------------------------------------------------------------------------------\n\t\/\/Open serial monitor for debugging\n\tSerial.begin(9600);    \n  \n\t\/\/Set up buttonAdd\n\tpinMode(buttonAdd, INPUT);\n\tattachInterrupt(digitalPinToInterrupt(buttonAdd), moreCycles, CHANGE);\n  \n\t\/\/Set up buttonAdd\n\tpinMode(buttonPressure, INPUT);\n    \n  \n    resetPomodoro();\n  \n\tif(state == 1)\n\t\tinitLCD();\n\t\/\/------------------------------------------------------------------------------------------------------------------------------\n\t\/\/ SET UP FOR HELLO!\n\t\/\/------------------------------------------------------------------------------------------------------------------------------\n\tservo.attach(4);\n\tpos = 0;\n\tservo.write(pos);\n\thello = 0;\n\thelloAux = 0;\n\n    \/\/------------------------------------------------------------------------------------------------------------------------------\n\t\/\/ SET UP FOR LIGHTS\n\t\/\/------------------------------------------------------------------------------------------------------------------------------\n    contador=0;\n    pinMode(Rojo,OUTPUT);\n    pinMode(Azul,OUTPUT);\n    lights();\n}\n  \n  \nvoid loop(){   \n    switch (state) \n    {\n\t\tcase 0:\n\t\t\tif (hello == 0)\n\t\t\t{\n\t\t\t\thello = 1;\n\t\t\t\tcuicui();\n\t\t\t}\n\t\tbreak;\n\t\tcase 1:\n\t\t\tif (auxInit == 0){\n\t\t\t\tinitLCD();\n\t\t\t\tconfigPom = 0;\n\t\t\t\tauxInit = 1;\n\t\t\t}\n\t\t\tPOMODORO(); \/\/State 1\n\t\tbreak;\n        case 2:\n            lights();\n        break;\n    }\n}\n\n\nvoid lights()\n{\n    Serial.println(contador);\n\n\tswitch (contador){\n\t\tcase 0:\n\t\t\tdigitalWrite(Azul,LOW);\n\t\t\tdigitalWrite(Rojo,LOW);\n      \n\t\tbreak;\n\t\tcase 1:\n\t\t\tdigitalWrite(Azul,HIGH);\n\t\t\tdigitalWrite(Rojo,HIGH);      \n\t\tbreak;\n\t\tcase 2:\n\t\t\tdigitalWrite(Azul,LOW);\n\t\t\tdigitalWrite(Rojo,HIGH);       \n\t\tbreak;\n\t\tcase 3:\n\t\t\tdigitalWrite(Azul,HIGH);\n\t\t\tdigitalWrite(Rojo,LOW);      \n\t\tbreak;\n\t\tcase 4:\n\t\t\tdigitalWrite(Azul,HIGH);\n\t\t\tdigitalWrite(Rojo,LOW);\n\t\t\tdelay(250);\n\t\t\tdigitalWrite(Azul,LOW);\n\t\t\tdigitalWrite(Rojo,HIGH);\n\t\t\tdelay(250);\n\t\tbreak;\n\t\tcase 5:\n\t\t\tanalogWrite(Azul,100);\n\t\t\tanalogWrite(Rojo,100);\n\t\tbreak;\n\t\tcase 6:\n\t\t\tfor(int i=0;i&lt;255;i++){\n\t\t\t\tanalogWrite(Azul,i);\n\t\t\t\tanalogWrite(Rojo,i);\n\t\t\t\tdelay(10);\n\t\t\t}\n\t\t\tfor(int i=0;i&lt;255;i++){\n\t\t\t\tanalogWrite(Azul,255-i);\n\t\t\t\tanalogWrite(Rojo,255-i);\n\t\t\t\tdelay(10);\n\t\t\t}\n\t\tbreak; \n\t\tcase 7:\n\t\t\tfor(int i=0;i&lt;255;i++){\n\t\t\t\tanalogWrite(Azul,i);\n\t\t\t\tanalogWrite(Rojo,255-i);\n\t\t\t\tdelay(10);\n\t\t\t}\n\t\t\tfor(int i=0;i&lt;255;i++){\n\t\t\t\tanalogWrite(Azul,255-i);\n\t\t\t\tanalogWrite(Rojo,i);\n\t\t\t\tdelay(10);\n\t\t\t}\n\t\tbreak;\n\t\tcase 8:\n\t\t\tfor(int i=0;i&lt;255;i++){\n\t\t\t\tanalogWrite(Azul,i);\n\t\t\t\tanalogWrite(Rojo,255-i);\n\t\t\t\tdelay(2);\n\t\t\t}\n\t\t\tfor(int i=0;i&lt;255;i++){\n\t\t\t\tanalogWrite(Azul,255-i);\n\t\t\t\tanalogWrite(Rojo,i);\n\t\t\t\tdelay(2);\n\t\t\t}\n\t\tbreak;\n\t}\n}\n\nvoid timerFunc(int* studyTime, int* secCounter, int* studyMin)\n{\n\t\/\/Update s to end\n\t*studyTime = *studyTime - 1;\n  \n\t\/\/Control secsPerMin\n\tif((*secCounter) == 00)\n\t{\n\t\t(*secCounter) = 59;\n\t\t(*studyMin)--;\n\t}else\n\t\t(*secCounter)--;\n}\n\nvoid moreCycles()\n{\n    \/\/Control cyclic component\n\tbuttonAddSignal = digitalRead(buttonAdd);\n  \n\t\/\/ CONTROL THE STATE  \n\tif(buttonAddSignal == HIGH and millis()-interruptInit&gt;debounce)\n\t{\n\t\tinterruptInit=millis();\n\t\tswitch(state)\n        {\n\t\t\tcase 0:\n\t\t\t\tSerial.println(\"Llamo cuicui\");\n\t\t\t\tif(helloAux == 0)\n\t\t\t\t\thello = 0;\n\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tnumOfCycles = ((numOfCycles)%9)+1;\n\t\t\t\tSerial.println(numOfCycles);\n\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tcontador= (contador +1)%9;\n\t\t\t\tlights();\n\t\t\tbreak;\n        }\n\t} \n}\n\nvoid standPhone()\n{\n    \/\/Control cyclic component\n\tbuttonModeSignal = digitalRead(buttonMode);\n\tSerial.println(\"Entro en la interrupcion de cambio estado\");\n    if(buttonModeSignal == HIGH)\n    {\n        Serial.println(\"Cambio estado\");\n\t\tstate = (state+1)%3;\n        Serial.println(state);\n        resetPomodoro();\n        delay(500);\n        Serial.println(\"Ya he cambiado todo\");\n    }   \n}\n\nvoid resetPomodoro()\n{  \n\taux = 0;\n\tauxInit = 0;\n\tactive = LOW;\n    \/\/Reset ligths\n\tcontador = 0;\n   \n\t\/\/Set up cyclic variable config\n\tnumOfCycles = 1;\n\tcurrentCycle = 1;\n\trestTime = 0;\n\tdigitalWrite(Rojo,LOW);\n\tdigitalWrite(Azul,LOW);\n  \n\t\/\/Set up initial time variable config\n\tminsForPomodoro = 1;\n\t(minsForPomodoro &lt; 1)? minsForPomodoro = 1: minsForPomodoro = minsForPomodoro;\n\tstudyTime = minsForPomodoro * 60; \n\tsecCounter = 00;\n\tstudyMin = minsForPomodoro;\n    lcd.clear();\n\tif (state == 0)\n\t\tlcd.print(\"[MODO SALUDO]\");\n\tif (state == 2)\n\t\tlcd.print(\"[MODO LUCES]\");\n}\n\nvoid POMODORO()\n{\n\t\/\/Updating current time  \n\tcurrentTime = millis();\n\tactive = digitalRead(buttonPressure);\n\tif (active == HIGH and configPom ==0)\n\t{\n\t\tlcd.setCursor(0,0);\n\t\tlcd.print(\"ESTAS ESTUDIANDO\");\n\t\tconfigPom = 1;\n\t}\n\t\n    while(millis() &lt; currentTime+msPerLoop){\n\t\t\/\/Synchronizing the loop with secs\n    } \n  \n\t\/\/Update the LCD\n    if(currentCycle &lt;= numOfCycles)\n    {\n\t\tif (active || restTime == true){\n\t\t\tif (aux == 1){\n\t\t\t\tlcd.clear();\n\t\t\t\tlcd.setCursor(0, 0);\n\t\t\t\tlcd.print(\"ESTAS ESTUDIANDO\");\n\t\t\t\taux = 0;\n\t\t\t}\n  \n\t\t\/\/Update Timer\n\t\ttimerFunc(&amp;studyTime, &amp;secCounter, &amp;studyMin);\n\t\t\n\t\tif(studyTime == 0)\n\t\t{\n\t\t\tSerial.println(\"He terminado el tiempo\");\n\t\t\tif(restTime == 0 &amp;&amp; currentCycle &lt; numOfCycles)\n\t\t\t{\n\t\t\t\tSerial.println(\"CAMBIO A DESCANSO\");\n\t\t\t\trestTime = 1;\n                lcd.clear();\n                lcd.setCursor(0,0);\n\t\t\t\tlcd.print(\"DESCANSO\");\n\t\t\t\tstudyMin = 1;\n\t\t\t\tstudyTime = studyMin * 60;\n\t\t\t} else{\n\t\t\t\tlcd.clear();\n\t\t\t\tlcd.setCursor(0,0);\n\t\t\t\tlcd.print(\"ESTAS ESTUDIANDO\");\n\t\t\t\trestTime = 0;\n\t\t\t\tcurrentCycle++;\n\t\t\t\t(currentCycle &lt;= numOfCycles)? studyMin = minsForPomodoro : studyMin = 0;\n\t\t\t\tstudyTime = studyMin * 60;\n\t\t\t}     \n\t\t}\n    } else{\n\t\tif(aux == 0 &amp;&amp; configPom == 1) {\n\t\t\tlcd.clear();\n\t\t\tlcd.setCursor(0, 0);\n\t\t\tlcd.print(\"ESTUDIA &gt;:C\");\n\t\t\taux = 1;\n\t\t}\n    }\n\t\n    if(state == 1)\n\t\tLCDPrint();\n    }else{    \n\t\tlcd.setCursor(0, 0);\n        if (currentCycle &lt;= 10)\n        {\n\t\t\tcurrentCycle = 11; \n\t\t\tlcd.clear();\n        }\n\t\tlcd.setCursor(0,0);\n\t\tlcd.print(\" FIN DE ESTUDIO\");    \n    }\n  \n\t\/\/Debugging values\n\tSerial.print(\"SecsFromThisMin: \");\n    Serial.println(secCounter);\n\tSerial.print(\"Mins to End: \");\n\tSerial.println(studyMin);\n\tSerial.print(\"currentMillis: \");\n\tSerial.println(currentTime);\n\tif (state == 2){\n        lcd.clear();\n\t\tlcd.print(\"[MODO LUCES]\");\n\t}\n}\n\nvoid LCDPrint()\n{\n\t\/\/Set up LCD values\n    lcd.setCursor(0, 1);\n    \n    \/\/Print mins left\n    if(studyMin &lt; 10){\n\t\tlcd.print(0);\n\t\tlcd.print(studyMin);\n    }else\n\t\tlcd.print(studyMin);\n\t\n\tlcd.print(\":\");\n    \n\t\/\/Print secs left\n\tif(secCounter &lt; 10){\n\t\tlcd.print(0);\n\t\tlcd.print(secCounter);   \n\t}else\n\t\tlcd.print(secCounter);\n    \n    \/\/Print rounds\n\tlcd.setCursor(11,1);\n\tlcd.print(\"R:\");\n    (currentCycle &gt; numOfCycles)? lcd.print(currentCycle-1) : lcd.print(currentCycle);          \n\tlcd.print(\"\/\");\n\tlcd.print(numOfCycles);\n}\n\nvoid initLCD()\n{\n\t\/\/Set up LCD config\n\tlcd.begin(16, 2);\n\tlcd.print(\"PREPARA ESTUDIO:\");\n  \n\t\/\/Print mins left\n    lcd.setCursor(0, 1);\n  \n\tif(studyMin &lt; 10){\n\t\tlcd.print(0);\n\t\tlcd.print(studyMin);\n    }else\n      lcd.print(studyMin);\n\n    lcd.print(\":\");\n    \n\t\/\/Print secs left\n    if(secCounter &lt; 10){\n\t\tlcd.print(0);\n\t\tlcd.print(secCounter); \n    }else\n\t\tlcd.print(secCounter);\n  \n\t\/\/Print rounds\n\tlcd.setCursor(11,1);\n\tlcd.print(\"R:\");\n\tlcd.print(currentCycle);\n\tlcd.print(\"\/\");\n\tlcd.print(numOfCycles);\n}\n\nvoid cuicui(){\n\tif(state == 0)\n\t{\n\t\tlcd.setCursor(0,0);\n\t\tlcd.print(\"HOLA AMIGO! :D\");\n\t\thelloAux = 1;\n\t\tfor(int i = 0; i&lt; 2; i++){\n\t\t\t\n\t\t\tfor(pos = 0; pos&lt;115; pos = pos +5){\n\t\t\t\tif(state != 0)\n\t\t\t\t\tbreak;        \t\t\n\t\t\t\tSerial.println(\"Moviendo un grado\");\n\t\t\t\tservo.write(pos);\n\t\t\t\tdelay(5);    \n\t\t\t}\n\t\t\tfor(pos = pos; pos&gt;80; pos = pos-5){\n\t\t\t\tif(state != 0)\n\t\t\t\t\tbreak;\t\t\t\t\n\t\t\t\tSerial.println(\"Moviendo menos un grado\");\n\t\t\t\tservo.write(pos);\n\t\t\t\tdelay(5);    \n\t\t\t}  \n\t\t}\n\t}\n\tservo.write(90);\n\thelloAux = 0;\n\tlcd.clear();\n\tlcd.setCursor(0,0);\n\tlcd.print(\"[MODO SALUDO]\");\n}<\/pre>\n\n\n\n<h2 class=\"has-black-color has-light-green-cyan-background-color has-text-color has-background wp-block-heading\">COSTE DE MATERIALES<\/h2>\n\n\n\n<p>Los materiales que se han tenido que comprar para la implementaci\u00f3n final del proyecto son: <\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>Nombre del material<\/td><td>Coste (p\/u)<\/td><\/tr><tr><td>1x Pila<\/td><td>4 \u20ac<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"has-light-green-cyan-background-color has-background wp-block-heading\">PROBLEMAS ENCONTRADOS Y SOLUCIONES<\/h2>\n\n\n\n<p>Inicialmente, el proyecto ten\u00eda planteados otras directrices y funciones que, por cuestiones de hardware en su mayor\u00eda, no han podido ser implementadas:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>Funci\u00f3n de reproducci\u00f3n de sonido<\/em>: se compraron lectores de microSD para reproducir sonidos pregrabados como <strong>m\u00fasica, alarmas<\/strong> (que saltar\u00edan si se levantaba el tel\u00e9fono cuando se estaba estudiando en el Pomodoro) <strong>y saludos<\/strong>. Sin embargo, ya que gran parte de los pines fueron conectados al LCD y a los tres botones de interrupci\u00f3n, no se pudo implementar su uso de forma correcta. Esto implic\u00f3 un <strong>coste econ\u00f3mico y de tiempo<\/strong>, ya que se hab\u00edan comprobado las especificaciones del componente y c\u00f3mo se programaba de forma correcta y se hab\u00eda comprado previamente.&nbsp;<\/li><li><em>Funciones respecto a las luces<\/em>: se utilizaron transistores para intentar que, con una misma se\u00f1al de un puerto digital, se encendieran simult\u00e1neamente varios LEDs. Al montar el circuito, hubo un problema con los transistores, que acabaron quem\u00e1ndose. Como la implementaci\u00f3n f\u00edsica necesitaba esos transistores y no se pudieron comprar a tiempo, se cambi\u00f3 esta implementaci\u00f3n para dar soporte \u00fanicamente a las dos luces que tiene actualmente el proyecto.&nbsp;<\/li><\/ul>\n\n\n\n<p>Una vez explicados estos problemas, se pueden explicar aquellos encontrados durante el desarrollo de la pr\u00e1ctica actual:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Tiempo de control de ejecuci\u00f3n en segundos del Pomodoro<\/strong>: ya que hab\u00eda que sincronizar el temporizador del tiempo de estudio en segundos reales.&nbsp;<\/li><li><strong>Efecto rebote en los pulsadores<\/strong>: hubo que implementar variables que evitaran que se detectaran pulsaciones fantasma por el efecto rebote de los pulsadores.&nbsp;<\/li><li>Dificultades manejando descanso y periodo de estudio en Pomodoro.&nbsp;<\/li><\/ul>\n\n\n\n<p><strong>Problemas de localizaci\u00f3n<\/strong>: ya que se ha tenido que hacer trabajo concurrente y separado por la situaci\u00f3n sanitaria, han existido algunos problemas de comunicaci\u00f3n y coordinaci\u00f3n de los integrantes en diferentes situaciones. Por ejemplo, tras la nevada de Filomena, no se pudo continuar con el desarrollo de la parte hardware ya que uno de los integrantes se hab\u00eda olvidado de los componentes en su segunda residencia y no pod\u00eda ir a por ellos por la situaci\u00f3n meteorol\u00f3gica.<\/p>\n\n\n\n<h2 class=\"has-light-green-cyan-background-color has-background wp-block-heading\">VIDEO EXPLICATIVO SOBRE LOS CASOS DE USO<\/h2>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Casos de Uso Angry Pomodoro\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/zhMSXDlm1xM?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Proyecto realizado por: Sergio Mulas Azabal Carlos Mariano Garc\u00eda Sanz David Gonz\u00e1lez Rueda Gonzalo Lobo Gonz\u00e1lez INTRODUCCI\u00d3N Angry Pomodoro es un dispositivo multifunci\u00f3n que est\u00e1 orientado al uso del estudio como herramienta. Se basa&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3026","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ANGRY POMODORO - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ANGRY POMODORO - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Proyecto realizado por: Sergio Mulas Azabal Carlos Mariano Garc\u00eda Sanz David Gonz\u00e1lez Rueda Gonzalo Lobo Gonz\u00e1lez INTRODUCCI\u00d3N Angry Pomodoro es un dispositivo multifunci\u00f3n que est\u00e1 orientado al uso del estudio como herramienta. Se basa&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-19T23:25:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-14T23:32:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU\" \/>\n<meta name=\"author\" content=\"Administrador de la red\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Administrador de la red\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/\"},\"author\":{\"name\":\"Administrador de la red\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\"},\"headline\":\"ANGRY POMODORO\",\"datePublished\":\"2021-01-19T23:25:22+00:00\",\"dateModified\":\"2021-12-14T23:32:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/\"},\"wordCount\":2707,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/\",\"name\":\"ANGRY POMODORO - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU\",\"datePublished\":\"2021-01-19T23:25:22+00:00\",\"dateModified\":\"2021-12-14T23:32:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#primaryimage\",\"url\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU\",\"contentUrl\":\"https:\\\/\\\/lh4.googleusercontent.com\\\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/angry-pomodoro\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ANGRY POMODORO\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\",\"name\":\"Administrador de la red\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"caption\":\"Administrador de la red\"},\"sameAs\":[\"https:\\\/\\\/blogs.etsii.urjc.es\"],\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/etsiiadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ANGRY POMODORO - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/","og_locale":"es_ES","og_type":"article","og_title":"ANGRY POMODORO - Proyectos con Arduino.","og_description":"Proyecto realizado por: Sergio Mulas Azabal Carlos Mariano Garc\u00eda Sanz David Gonz\u00e1lez Rueda Gonzalo Lobo Gonz\u00e1lez INTRODUCCI\u00d3N Angry Pomodoro es un dispositivo multifunci\u00f3n que est\u00e1 orientado al uso del estudio como herramienta. Se basa&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2021-01-19T23:25:22+00:00","article_modified_time":"2021-12-14T23:32:57+00:00","og_image":[{"url":"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU","type":"","width":"","height":""}],"author":"Administrador de la red","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Administrador de la red","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/"},"author":{"name":"Administrador de la red","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211"},"headline":"ANGRY POMODORO","datePublished":"2021-01-19T23:25:22+00:00","dateModified":"2021-12-14T23:32:57+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/"},"wordCount":2707,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#primaryimage"},"thumbnailUrl":"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/","name":"ANGRY POMODORO - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#primaryimage"},"thumbnailUrl":"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU","datePublished":"2021-01-19T23:25:22+00:00","dateModified":"2021-12-14T23:32:57+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#primaryimage","url":"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU","contentUrl":"https:\/\/lh4.googleusercontent.com\/phrXAXIbeCq41O785xLBej5GqKCReK2CYR5frqSkgtC62eQiaRRnrWE1QpNlrNn7ybwk7qOwnlHX6fpRn-iTx0ng2xoDdccOg53bARt37srqtomNhL0Uch7wHlG3227myTjXvZU"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/angry-pomodoro\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"ANGRY POMODORO"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211","name":"Administrador de la red","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","caption":"Administrador de la red"},"sameAs":["https:\/\/blogs.etsii.urjc.es"],"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/etsiiadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/3026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=3026"}],"version-history":[{"count":8,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/3026\/revisions"}],"predecessor-version":[{"id":4515,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/3026\/revisions\/4515"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=3026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=3026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=3026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}