{"id":7757,"date":"2023-12-20T22:35:17","date_gmt":"2023-12-20T21:35:17","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=7757"},"modified":"2024-01-25T13:29:04","modified_gmt":"2024-01-25T12:29:04","slug":"lector-de-tarjetas","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/","title":{"rendered":"Lector de tarjetas"},"content":{"rendered":"\n<p>Realizado por Lucas Rodr\u00edguez Bravo, Rodrigo Due\u00f1as Herrero y Luc\u00eda \u00c1lvarez Bl\u00e1zquez<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>1-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Objetivos y planteamiento del proyecto<\/a><\/h1>\n\n\n\n<p>La primera idea que se tuvo a la hora de plantear el proyecto fue realizar un lector de tarjetas. Esta idea le pareci\u00f3 correcta al grupo y fue la elegida. Adem\u00e1s, se decidi\u00f3 que fuera multifuncional.<\/p>\n\n\n\n<p>El siguiente paso fue idear como iba a ser su funcionamiento. Se us\u00f3 la idea de las tarjetas perforadas como inspiraci\u00f3n y se ide\u00f3 que las tarjetas que fuera a leer el lector tendr\u00edan huecos para dejar pasar la luz.<\/p>\n\n\n\n<p>Despu\u00e9s, se pensaron las posibles funciones que podr\u00eda a llegar a haber. Se pens\u00f3 r\u00e1pidamente la de identificaci\u00f3n y de sumas. Por \u00faltimo, se valor\u00f3 que sonase un sonido por cada hueco de la tarjeta. Sin embargo, se cambi\u00f3 esta idea por hacer sonar una letra, que se obtendr\u00eda por su orden en el alfabeto, en morse, ya que se pens\u00f3 que ser\u00eda m\u00e1s pr\u00e1ctico.<\/p>\n\n\n\n<p>Finalmente, se decidi\u00f3 que funcionase a trav\u00e9s de la obtenci\u00f3n de n\u00fameros en binario que se obtendr\u00edan por el paso o no de la luz.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>2-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Funcionamiento<\/a><\/h1>\n\n\n\n<p>El lector es una m\u00e1quina de estados, en la que cada estado es un modo. Estos modos hacen cada uno cosas diferentes, pero se basan en el mismo proceso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En la protoboard existen LEDs blancos encendidos todo el tiempo. En frente de ellos hay fotorresistencias que reciben la luz.<\/li>\n\n\n\n<li>Las tarjetas presentan huecos, cuya posici\u00f3n est\u00e1 alineado con las fotorresistencias y LEDs. Al meter la tarjeta en el lector, se separan las LDRs y los LEDs, de tal manera que una fotorresistencia solo podr\u00e1 recibir luz si la tarjeta introducida tiene hueco en su posici\u00f3n.<\/li>\n\n\n\n<li>Las LDRs est\u00e1n numeradas del 0 al 4. Cuando la fotorresistencia recibe luz se genera un 1 en su posici\u00f3n. Sino la recibe, se genera un 0. De esta manera se obtiene un n\u00famero en binario, que luego se convierte a decimal.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"379\" height=\"342\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-72.png\" alt=\"\" class=\"wp-image-7781\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-72.png 379w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-72-300x271.png 300w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>1: Tarjeta de valor 26 (11010).<\/p>\n\n\n\n<p>El dispositivo tiene dos botones. Uno se usa para cambiar de estado al siguiente y otro para realizar la acci\u00f3n correspondiente al modo.<\/p>\n\n\n\n<p>Con el n\u00famero obtenido se har\u00e1n diferentes acciones en funci\u00f3n del modo:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><\/strong><strong>MODO ID: <\/strong>Se imprime en la pantalla LCD el n\u00famero en decimal.<\/li>\n\n\n\n<li><strong><\/strong><strong>MODO SUMAR: <\/strong>El n\u00famero de la tarjeta se suma al valor almacenado anteriormente. Este valor se reinicia al cambiar de modo.<\/li>\n\n\n\n<li><strong>MODO MORSE: <\/strong>Hace sonar en morse la letra que se obtenga a partir del n\u00famero. Por ejemplo, la 1 ser\u00eda la A, la 2 la B, etc.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"390\" height=\"513\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-73.png\" alt=\"\" class=\"wp-image-7782\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-73.png 390w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-73-228x300.png 228w\" sizes=\"auto, (max-width: 390px) 100vw, 390px\" \/><\/figure>\n\n\n\n<p><a><\/a><a>Ilustraci\u00f3n <\/a>2: Diagrama de estados.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>3-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hardware<\/a><\/h1>\n\n\n\n<p>Para la realizaci\u00f3n de este proyecto se han usado los siguientes componentes de la caja del pack de Arduino:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>UNO R3 x1<\/li>\n\n\n\n<li>Modulo LCD1602 x1<\/li>\n\n\n\n<li>Protoboard x1<\/li>\n\n\n\n<li>Protoboard placa de Expansi\u00f3n x1<\/li>\n\n\n\n<li>Resistencias 330 ohmios x14<\/li>\n\n\n\n<li>LEDs blancos x5<\/li>\n\n\n\n<li>Potenci\u00f3metro x1<\/li>\n\n\n\n<li>Zumbador x1<\/li>\n\n\n\n<li>Bot\u00f3n x2<\/li>\n\n\n\n<li>Fotorresistencias x5<\/li>\n\n\n\n<li>Cables x53<\/li>\n<\/ul>\n\n\n\n<p>Con estos componentes se ha montado el prototipo de una manera similar al siguiente esquema:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"741\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-74.png\" alt=\"\" class=\"wp-image-7783\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-74.png 939w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-74-300x237.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-74-768x606.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><\/figure>\n\n\n\n<p><a><\/a><a>Ilustraci\u00f3n <\/a>3: Esquema Arduino tinkercad<\/p>\n\n\n\n<p>Como se ve las fotorresistencias funcionan como entradas anal\u00f3gicas, estando conectada a los pines de entrada anal\u00f3gicos de A0 a A4. Adem\u00e1s, est\u00e1n conectadas en el orden en que se ordena los bits en el n\u00famero binario.<\/p>\n\n\n\n<p>Los botones se conectan a los pines digitales 2 y 3.<\/p>\n\n\n\n<p>El zumbador est\u00e1 conectado al pin digital 9, que funciona como pin de salida anal\u00f3gica, ya que es un PWM.<\/p>\n\n\n\n<p>Por \u00faltimo, se realizan las conexiones correctas de la pantalla LCD, utilizando un potenci\u00f3metro para regular la entrada de electricidad en ella.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>4-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Extras<\/a><\/h1>\n\n\n\n<p>Adem\u00e1s de los componentes electr\u00f3nicos utilizados, se han necesitado hacer algunos componentes extra para complementar el funcionamiento del hardware. A continuaci\u00f3n, se describen y se muestran im\u00e1genes de estos componentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tarjetas perforadas:<\/strong> hechas a partir de cartulina y plastificadas posteriormente. Utilizadas para identificar los diferentes n\u00fameros binarios. Los huecos en las tarjetas est\u00e1n medidos para que dejen pasar la luz entre un LED y su correspondiente fotorresistencia. Para ahorrar material utilizamos las tarjetas por las dos caras, exceptuando la de 0, 31, 8 y 24 que no lo permiten ya que son sim\u00e9tricas. Tambi\u00e9n, tienen el n\u00famero decimal que representan en la esquina superior derecha.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"303\" height=\"306\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-75.png\" alt=\"\" class=\"wp-image-7784\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-75.png 303w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-75-297x300.png 297w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-75-150x150.png 150w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-75-80x80.png 80w\" sizes=\"auto, (max-width: 303px) 100vw, 303px\" \/><\/figure>\n\n\n\n<p><a><\/a><a>Ilustraci\u00f3n <\/a>4: Tarjetas perforadas<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Carcasa:<\/strong> Carcasa modelada en sketchup e impresa en 3D. Utilizada para meter las tarjetas y separar los LEDs unos de otros para que focalicen a la fotorresistencia correspondiente.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"373\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-76.png\" alt=\"\" class=\"wp-image-7785\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-76.png 396w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-76-300x283.png 300w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"382\" height=\"374\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-77.png\" alt=\"\" class=\"wp-image-7786\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-77.png 382w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-77-300x294.png 300w\" sizes=\"auto, (max-width: 382px) 100vw, 382px\" \/><\/figure>\n\n\n\n<p><a><\/a><a>Ilustraci\u00f3n <\/a>5: Modelo 3D de carcasa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Ilustraci\u00f3n 6: Carcasa impresa en 3D<\/p>\n\n\n\n<p>Ya se contaba los materiales para estos componentes, por lo que no hubo que gastarse dinero adicional.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a><\/a><a>5-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Desarrollo<\/a><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lo primero que se hizo fue hacer el circuito b\u00e1sico del lector, es decir, poner las LEDs y las fotorresistencias colocadas en oposici\u00f3n y conectarlas al Arduino. Se desarrollo un peque\u00f1o programa simplemente para comprobar si las LDRs recib\u00edan bien la luz de los LEDs y obten\u00edamos el n\u00famero en binario, que en este caso era 11111. Adem\u00e1s, se realiz\u00f3 la funci\u00f3n getBinary(), que transformaba el binario en decimal. Inmediatamente se vio que iba a ser necesario un elemento para separar la luz de los LEDs y por el que se pudiese introducir las tarjetas. As\u00ed, se hizo una versi\u00f3n muy simple de este cart\u00f3n para hacerse una idea de c\u00f3mo ser\u00eda.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"428\" height=\"280\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-78.png\" alt=\"\" class=\"wp-image-7787\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-78.png 428w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-78-300x196.png 300w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/><\/figure>\n\n\n\n<p><a><\/a><a>Ilustraci\u00f3n <\/a>7: Carcasa de cart\u00f3n<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Despu\u00e9s, se a\u00f1adi\u00f3 el bot\u00f3n de cambio de estado. As\u00ed mismo, se program\u00f3 el funcionamiento de los cambios de estado y se declararon las funciones de los modos. Seguidamente, se introdujo el siguiente bot\u00f3n, que al pulsarlo las funciones har\u00edan su funci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"421\" height=\"316\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-79.png\" alt=\"\" class=\"wp-image-7788\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-79.png 421w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-79-300x225.png 300w\" sizes=\"auto, (max-width: 421px) 100vw, 421px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>8: Protoboard con los 2 botones<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se comenzaron a realizar las funciones. Para las dos primeras (identificaci\u00f3n y sumar) se mostraba el resultado impreso en el monitor virtual.<\/li>\n\n\n\n<li>Para el modo morse se a\u00f1adi\u00f3 un zumbador que generar\u00eda el sonido. A nivel software, se implement\u00f3 su funci\u00f3n y se a\u00f1adieron las funciones point() y line(), que son las encargadas de gestionar la emisi\u00f3n de sonido.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"468\" height=\"351\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-80.png\" alt=\"\" class=\"wp-image-7789\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-80.png 468w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-80-300x225.png 300w\" sizes=\"auto, (max-width: 468px) 100vw, 468px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>9: zumbador<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En paralelo a esto, se realizo el dise\u00f1o de el lector de tarjetas en 3D para m\u00e1s tarde imprimirlo y se fueron haciendo las tarjetas necesarias para obtenerlos todos n\u00fameros del 0 al 31.<\/li>\n\n\n\n<li>A continuaci\u00f3n, se incorpor\u00f3 la carcasa del lector de tarjetas, de tal manera que al introducir una tarjeta separase las LDRs de los LEDs. Tras varias pruebas, ya que las tarjetas no dejaban pasar la luz de manera correcta y hubo que cambiar el tama\u00f1o de los huecos varias veces, se obtuvo el resultado adecuado.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"493\" height=\"370\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png\" alt=\"\" class=\"wp-image-7790\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png 493w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81-300x225.png 300w\" sizes=\"auto, (max-width: 493px) 100vw, 493px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>10: Carcasa del lector<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El \u00faltimo paso fue a\u00f1adir la pantalla LCD, para lo cual usamos una placa de expansi\u00f3n de protoboard ya que se hab\u00eda acabado el hueco en la principal. Adem\u00e1s, se realiz\u00f3 la programaci\u00f3n de la LCD.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"374\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-82.png\" alt=\"\" class=\"wp-image-7791\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-82.png 498w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-82-300x225.png 300w\" sizes=\"auto, (max-width: 498px) 100vw, 498px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>11: Pantalla LCD<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>6-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Software<\/a><\/h1>\n\n\n\n<p>A continuaci\u00f3n, se explicar\u00e1 el c\u00f3digo utilizado para el desarrollo del lector, desde la declaraci\u00f3n de variables hasta las funciones que implementan cada modo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Declaraci\u00f3n de variables:<\/strong><ul><li>Lo primero es declarar el LCD. Se asignan los pines digitales necesarios y se asigna el LCD a sus pines.<\/li><\/ul><ul><li>Seguidamente, se realiza la declaraci\u00f3n de constantes. Por un lado, se asignan los pines a los botones (2 y 3) y el pin al zumbador (9). Se iguala BINARY_SIZE, que ser\u00e1 el tama\u00f1o del n\u00famero binario, pointPause y linePause, que ser\u00e1n la cantidad de tiempo que suena el zumbador. La l\u00ednea suena el triple que el punto. Por \u00faltimo, se establece la frecuencia a la que sonar\u00e1 el zumbador y la barrera de intensidad que tendr\u00e1n que superar las fotorresistencias para conseguir un 1.<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>Por \u00faltimo, se declaran las variables del programa. Primero, se inicializan las variables responsables de gestionar el estado de los botones, siendo las variables que tengan la palabra extra aquellas destinadas a gestionar el bot\u00f3n de acci\u00f3n.Despu\u00e9s se crean los arrays encargados de la entrada normalizada, normalizedSensor, y del n\u00famero binario, binaryNumber. Luego se crea la variable mode en la que se guarda el modo actual y las variables modeOutput, que se encargan de guardar las salidas de cada modo.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"764\" height=\"193\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-83.png\" alt=\"\" class=\"wp-image-7792\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-83.png 764w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-83-300x76.png 300w\" sizes=\"auto, (max-width: 764px) 100vw, 764px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>12: Declaraci\u00f3n e inicializaci\u00f3n del LCD.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"442\" height=\"194\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-84.png\" alt=\"\" class=\"wp-image-7793\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-84.png 442w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-84-300x132.png 300w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/figure>\n\n\n\n<p><a name=\"_Toc154001292\"><b><span style=\"font-size:11.0pt;line-height:115%;,sans-serif\">Ilustraci\u00f3n <\/span><\/b><\/a><span style=\"font-size:11.0pt;line-height:115%;,sans-serif\"><b>13<\/b><\/span><span style=\"font-size:11.0pt;line-height:115%;,sans-serif\"><b>: Declaraci\u00f3n de constantes.<\/b><\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"410\" height=\"192\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-85.png\" alt=\"\" class=\"wp-image-7794\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-85.png 410w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-85-300x140.png 300w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>14: Declaraci\u00f3n de variables.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Setup: <\/strong>En esta funci\u00f3n se inicia el LCD, se ponen los pines de los botones en modo entrada, del zumbador en modo salida, y comienza la comunicaci\u00f3n serial para el monitor virtual.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"201\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-86.png\" alt=\"\" class=\"wp-image-7795\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-86.png 558w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-86-300x108.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>15: Funci\u00f3n setup()<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>getBinary<\/strong>: Esta funci\u00f3n recibe un array de 1s y 0s y lo traduce a un n\u00famero decimal sumando cada n\u00famero del array multiplicado por 2 elevado al \u00edndice del n\u00famero en el array.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"245\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-87.png\" alt=\"\" class=\"wp-image-7796\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-87.png 524w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-87-300x140.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>16: Funci\u00f3n getBinary().<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>modeId<\/strong>: Al inicio de la funci\u00f3n se comprueba si el bot\u00f3n est\u00e1 pulsado. Si es el caso, se realiza el cuerpo de la funci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>Una vez detectada la pulsaci\u00f3n del bot\u00f3n, se guarda en la variable modeOutput el resultado de la funci\u00f3n getBinary(), que ha sido guardado en la variable binaryToInt.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"492\" height=\"323\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-88.png\" alt=\"\" class=\"wp-image-7797\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-88.png 492w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-88-300x197.png 300w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>17: Funci\u00f3n modeId().<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>modeAdd<\/strong>: Al inicio de la funci\u00f3n se comprueba si el bot\u00f3n est\u00e1 pulsado. Si es el caso, se realiza el cuerpo de la funci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>Esta funci\u00f3n es similar a modeId pero en vez de actualizar el modeOutput cambi\u00e1ndolo directamente por binaryToInt, se va sumando esta variable al resultado, para as\u00ed poder sumar distintos n\u00fameros.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"396\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-89.png\" alt=\"\" class=\"wp-image-7798\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-89.png 510w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-89-300x233.png 300w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>18: Funci\u00f3n modeAdd().<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>modeMorse: <\/strong>Al inicio de la funci\u00f3n se comprueba si el bot\u00f3n est\u00e1 pulsado. Si es el caso, se realiza el cuerpo de la funci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>Obtenemos el n\u00famero de tarjeta a trav\u00e9s de getBinary() y lo guardamos en la variable aux. Seg\u00fan el n\u00famero obtenido, se guarda la letra correspondiente en modeOutput2 y se muestra en el LCD.<\/p>\n\n\n\n<p>Inmediatamente despu\u00e9s, se ejecutan las funciones point() y line(). Estas dos funciones son las encargadas de hacer que se emita un punto o una l\u00ednea de morse. Se utiliza tone() para hacer sonar al zumbador y se le deja sonar el tiempo asignado a pointPause o a linePause.<\/p>\n\n\n\n<p>Por \u00faltimo, se retorna a la funci\u00f3n y se termina su ejecuci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"524\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-90.png\" alt=\"\" class=\"wp-image-7799\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-90.png 678w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-90-300x232.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>19: Funci\u00f3n modeMorse().<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"419\" height=\"181\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-91.png\" alt=\"\" class=\"wp-image-7800\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-91.png 419w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-91-300x130.png 300w\" sizes=\"auto, (max-width: 419px) 100vw, 419px\" \/><\/figure>\n\n\n\n<p><a><strong>Ilustraci\u00f3n <\/strong><\/a><strong>20: Funci\u00f3n point().<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"392\" height=\"180\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-92.png\" alt=\"\" class=\"wp-image-7801\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-92.png 392w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-92-300x138.png 300w\" sizes=\"auto, (max-width: 392px) 100vw, 392px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>21: Funci\u00f3n line().<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Loop<\/strong>: El loop principal del programa consiste en, primero leer todos los valores de los sensores y botones, adem\u00e1s de poner en el array del n\u00famero binario los valores sacados de las fotorresistencias y guardarlo como decimal en binaryToInt usando getBinary(). A continuaci\u00f3n, se detecta si se ha pulsado el bot\u00f3n de cambio de modo para cambiarlo en el caso de que se haya pulsado y se ejecuta la funci\u00f3n correspondiente al modo actual usando un switch y la variable mode. Por \u00faltimo, se escribe en la pantalla lcd el modo actual y el resultado de este.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"443\" height=\"451\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-93.png\" alt=\"\" class=\"wp-image-7802\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-93.png 443w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-93-295x300.png 295w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-93-80x80.png 80w\" sizes=\"auto, (max-width: 443px) 100vw, 443px\" \/><\/figure>\n\n\n\n<p><a><strong>Ilustraci\u00f3n <\/strong><\/a><strong>22: Primera parte funci\u00f3n loop().<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"365\" height=\"453\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-94.png\" alt=\"\" class=\"wp-image-7803\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-94.png 365w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-94-242x300.png 242w\" sizes=\"auto, (max-width: 365px) 100vw, 365px\" \/><\/figure>\n\n\n\n<p><a>Ilustraci\u00f3n <\/a>23: Segunda parte funci\u00f3n loop().<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>7-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Problemas y soluciones<\/a><\/h1>\n\n\n\n<p>La mayor\u00eda de los problemas que hemos encontrado han sido problemas de ajuste, que se han solucionado a base de prueba y error.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&nbsp;Al introducir la carcasa en el sistema hubo que modificar varias veces el treshold hasta encontrar la soluci\u00f3n \u00f3ptima, que fue un valor bajo ya que este dejaba pasaba menos luz que la esperada.<\/li>\n\n\n\n<li>A la hora de cortar los huecos en las tarjetas hubo que a ver varias pruebas ya que estas dejaban pasar poco la luz, por lo que se cambia el dise\u00f1o de las tarjetas de huecos redondos a huecos rectangulares que dejaban entrar toda la luz.<\/li>\n<\/ul>\n\n\n\n<p>Hubo un problema en el programa que nos cost\u00f3 encontrar, y era que a la hora de pasar de un float a un int en getBinary(), esto se casteaba mal, dando resultados menores de los que deber\u00edan ser. Se fue poco a poco depurando hasta encontrar el fallo. La soluci\u00f3n fue simplemente hacer todas las variables float.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>8-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reparto de tareas.<\/a><\/h1>\n\n\n\n<p>Pr\u00e1cticamente el trabajo de los miembros del grupo ha sido el mismo en todo momento, los \u00fanicos casos en los que se diferencian eran en los que un miembro era bueno haciendo algo, o en el caso contrario, ten\u00eda la imposibilidad de participar.<\/p>\n\n\n\n<p>Aun as\u00ed, en la siguiente tabla se muestra que miembros del grupo han participado en que tareas. Las casillas con X son aquellas en las que el miembro ha participado.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>&nbsp;<\/td><td>Dise\u00f1o<\/td><td>Hardware<\/td><td>Software<\/td><td>Carcasa<\/td><td>Tarjetas<\/td><td>Presentaci\u00f3n<\/td><\/tr><tr><td>Lucas<\/td><td>X<\/td><td>X<\/td><td>X<\/td><td>X<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>Luc\u00eda<\/td><td>X<\/td><td>X<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>X<\/td><td>X<\/td><\/tr><tr><td>Rodrigo<\/td><td>X<\/td><td>X<\/td><td>X<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">V\u00eddeo<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-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=\"DSE Final Grupo9\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/QQX9XQig_Ig?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=\"wp-block-heading\">C\u00f3digo<\/h2>\n\n\n\n<pre class=\"wp-block-code has-white-background-color has-background\"><code>#include &lt;LiquidCrystal.h&gt;\n\nconst int rs = 12, en = 11, d4 = 7, d5 = 6, d6 = 5, d7 = 4;\nLiquidCrystal lcd(rs, en, d4, d5, d6, d7);\n\n\nconst int BINARY_SIZE = 3;\nconst int buttonPin = 2; \nconst int buttonExtraPin = 3;\nconst int buzzerPin = 9;\nconst float pointPause = 500;\nconst float linePause = pointPause * 3;\nconst float binaryThreshold =0.7;\nconst unsigned int TONE = 127;\nint buttonState = LOW;\nint buttonExtraState = LOW;\nbool buttonPressed = false;\nbool buttonExtraPressed = false;\nfloat binaryNumber&#091;BINARY_SIZE];\nfloat binaryToInt =0;\nfloat normalizedSensor&#091;BINARY_SIZE];\nint mode = 0;\nfloat modeOutput&#091;2] = {0,0};\nchar modeOutput2 = ' ';\n\nvoid setup() {\n  \/\/ set up the LCD's number of columns and rows:\n  lcd.begin(16, 2);\n  pinMode(buzzerPin, OUTPUT);\n  \/\/ Print a message to the LCD.\n  pinMode(buttonPin, INPUT);\n  pinMode(buttonExtraPin, INPUT);\n  Serial.begin(9600);\n}\n\nvoid loop() {\n  \/\/ set the cursor to column 0, line 1\n  \/\/ (note: line 1 is the second row, since counting begins with 0):\n  \n  \n  \/\/ print the number of seconds since reset:\n  \n  buttonState = digitalRead(buttonPin);\n  buttonExtraState = digitalRead(buttonExtraPin);\n  int sensorValue&#091;BINARY_SIZE];\n  sensorValue&#091;0]= analogRead(A0);\n  sensorValue&#091;1]= analogRead(A1);\n  sensorValue&#091;2]= analogRead(A2);\n  sensorValue&#091;3]= analogRead(A3);\n  sensorValue&#091;4]= analogRead(A4);\n  for(int i=0 ; i&lt; BINARY_SIZE; i++){\n    normalizedSensor&#091;i] = ((float)(sensorValue&#091;i])\/4)\/255;\n    if(normalizedSensor&#091;i]&gt;binaryThreshold){\n      binaryNumber&#091;i]=1;\n    }\n    else{\n     binaryNumber&#091;i]=0;\n    }\n  }\n  binaryToInt = getBinary(binaryNumber);\n  if (buttonState == HIGH) {\n    if(buttonPressed==false){\n      buttonPressed=true;\n    }\n  }\n  else{\n    if(buttonPressed){\n      buttonPressed=false;\n      mode++;\n      if(mode&gt;=3){\n        mode=0;\n      }   \n    }\n  }\n  lcd.setCursor(0, 0);\n  lcd.print(\"modo: \");\n  switch(mode){\n    case 0:\n    lcd.print(\"ID   \");\n      modeId();\n      break;\n    case 1:\n    lcd.print(\"Suma \");\n      modeAdd();\n      break;\n    case 2:\n    lcd.print(\"Morse\");\n      modeOutput&#091;1]=0;\n      modeMorse();\n      break;\n  }\n  lcd.setCursor(0, 1);\n  lcd.print(\"                          \");\n  lcd.setCursor(0, 1);\n  lcd.print(\"Result: \");\n  if(mode!=2){\n    lcd.print(modeOutput&#091;mode]);\n  }\n  else{\n    lcd.print(modeOutput2);\n  }\n  \n  Serial.print(\"mode: \");\n  Serial.print(mode);\n  Serial.println(\" \");\n  delay(1);\n}\n\n\nvoid modeId(){\n  if (buttonExtraState == HIGH) {\n    if(buttonExtraPressed==false){\n      buttonExtraPressed=true;\n    }\n  }\n  else{    \n    if(buttonExtraPressed){\n      buttonExtraPressed=false;\n      modeOutput&#091;0] = binaryToInt;\n    }\n  }\n  Serial.print(\" Output: \");\n  Serial.print(modeOutput&#091;0]);\n  Serial.print(\" \");\n}\n\nvoid modeAdd(){\n  if (buttonExtraState == HIGH) {\n    if(buttonExtraPressed==false){\n      buttonExtraPressed=true;\n    }\n  }\n  else{\n    if(buttonExtraPressed){\n      buttonExtraPressed=false;\n      modeOutput&#091;1] += binaryToInt;\n    }\n  }\n  Serial.print(\" Output: \");\n  Serial.print(modeOutput&#091;1]);\n  Serial.print(\" \");\n}\n\nfloat getBinary(float binary&#091;]) {\n  float number=0;\n  for(int i=0;i&lt;BINARY_SIZE;i++){\n    \/*Serial.print(binary&#091;i] * pow(2,i));\n    Serial.print(\" + \");*\/\n    number+= binary&#091;i] * pow(2,i);   \n  }\n  Serial.print(\" = \");\n  Serial.print(number);\n  return number;\n}\n\nvoid point(){\n  tone(buzzerPin, TONE);\n  delay(pointPause);\n  noTone(buzzerPin);\n  delay(pointPause);\n}\n\nvoid line(){\n  tone(buzzerPin, TONE);\n  delay(linePause);\n  noTone(buzzerPin);\n  delay(pointPause);\n}\n\n\nvoid modeMorse(){\n  if (buttonExtraState == HIGH) {\n    if(buttonExtraPressed==false){\n      buttonExtraPressed=true;\n    }\n  }\n  else{\n    if(buttonExtraPressed){\n      buttonExtraPressed=false;\n      int aux = binaryToInt;\n      if(binaryToInt&gt;3){\n        aux++;\n      }\n      switch(aux){\n        case 1:\/\/A *-\n        point(); line();\n        modeOutput2 = 'A';\n        break;\n        case 2:\/\/B -***\n        line(); point(); point(); point();\n        modeOutput2 = 'B';\n        break;\n        case 3:\/\/C -*-*\n        line(); point(); line(); point();\n        modeOutput2 = 'C';\n        break;\n        case 4:\/\/D -**\n        line(); point(); point();\n        modeOutput2 = 'D';\n        break;\n        case 5:\/\/E *\n        point();\n        modeOutput2 = 'E';\n        break;\n        case 6:\/\/F **-*\n        point(); point(); line(); point();\n\t\tmodeOutput2 = 'F';\n        break;\n        case 7:\/\/G --*\n        line(); line(); point();\n        modeOutput2 = 'G';\n        break;\n        case 8:\/\/H ****\n        point(); point(); point(); point();\n        modeOutput2 = 'H';\n        break;\n        case 9:\/\/I **\n        point(); point();\n        modeOutput2 = 'I';\n        break;\n        case 10:\/\/J *---\n        point(); line(); line(); line();\n        modeOutput2 = 'J';\n        break;\n        case 11:\/\/K -*-\n        line(); point(); line(); \n        modeOutput2 = 'K';\n        break;\n        case 12:\/\/L *-**\n        point(); line(); point(); point();\n        modeOutput2 = 'L';\n        break;\n        case 13:\/\/M -- \n        line(); line();\n        modeOutput2 = 'M';\n        break;\n        case 14:\/\/N -*\n        line(); point();\n        modeOutput2 = 'N';\n        break;\n        case 15:\/\/O ---\n        line(); line(); line();\n        modeOutput2 = 'O';\n        break;\n        case 16:\/\/P *--*\n        point(); line(); line(); point();\n        modeOutput2 = 'P';\n        break;\n        case 17:\/\/Q --*-\n        line(); line(); point(); line();\n        modeOutput2 = 'Q';\n        break;\n        case 18:\/\/R *-*\n        point(); line(); point();\n        modeOutput2 = 'R';\n        break;\n        case 19:\/\/S ***\n        point(); point(); point();\n        modeOutput2 = 'S';\n        break;\n        case 20:\/\/T -\n        line();\n        modeOutput2 = 'T';\n        break;\n        case 21:\/\/U **-\n        point(); point(); line();\n        modeOutput2 = 'U';\n        break;\n        case 22:\/\/V ***-\n        point(); point(); point(); line();\n        modeOutput2 = 'V';\n        break;\n        case 23:\/\/W *--\n        point(); line(); line();\n        modeOutput2 = 'W';\n        break;\n        case 24:\/\/X -**-\n        line(); point(); point(); line();\n        modeOutput2 = 'X';\n        break;\n        case 25:\/\/Y -*--\n        line(); point(); line(); line();\n        modeOutput2 = 'Y';\n        break;\n        case 26:\/\/Z --**\n        line(); line(); point(); point();\n        modeOutput2 = 'Z';\n        break;\n      }\n  \t}\n  }\n  Serial.print(\" Output: \");\n  Serial.print(modeOutput2);\n  Serial.print(\" \");\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Realizado por Lucas Rodr\u00edguez Bravo, Rodrigo Due\u00f1as Herrero y Luc\u00eda \u00c1lvarez Bl\u00e1zquez 1-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Objetivos y planteamiento del proyecto La primera idea que se tuvo a la hora de plantear el proyecto fue realizar un&#46;&#46;&#46;<\/p>\n","protected":false},"author":190,"featured_media":7790,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,16],"class_list":["post-7757","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino","tag-urjc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lector de tarjetas - 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\/lector-de-tarjetas\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lector de tarjetas - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Realizado por Lucas Rodr\u00edguez Bravo, Rodrigo Due\u00f1as Herrero y Luc\u00eda \u00c1lvarez Bl\u00e1zquez 1-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Objetivos y planteamiento del proyecto La primera idea que se tuvo a la hora de plantear el proyecto fue realizar un&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-20T21:35:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-25T12:29:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png\" \/>\n\t<meta property=\"og:image:width\" content=\"493\" \/>\n\t<meta property=\"og:image:height\" content=\"370\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"DSE_2023_24_G09\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"DSE_2023_24_G09\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 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\\\/lector-de-tarjetas\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/\"},\"author\":{\"name\":\"DSE_2023_24_G09\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/0fca7b919e05fa109678c7941a93b533\"},\"headline\":\"Lector de tarjetas\",\"datePublished\":\"2023-12-20T21:35:17+00:00\",\"dateModified\":\"2024-01-25T12:29:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/\"},\"wordCount\":2323,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/image-81.png\",\"keywords\":[\"Arduino\",\"urjc\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/\",\"name\":\"Lector de tarjetas - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/image-81.png\",\"datePublished\":\"2023-12-20T21:35:17+00:00\",\"dateModified\":\"2024-01-25T12:29:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/image-81.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/image-81.png\",\"width\":493,\"height\":370},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/lector-de-tarjetas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lector de tarjetas\"}]},{\"@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\\\/0fca7b919e05fa109678c7941a93b533\",\"name\":\"DSE_2023_24_G09\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6645be1d2228a9c539b54940aefee6c2035be05cf7fb2f3eb03d82cb4ada7d80?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6645be1d2228a9c539b54940aefee6c2035be05cf7fb2f3eb03d82cb4ada7d80?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6645be1d2228a9c539b54940aefee6c2035be05cf7fb2f3eb03d82cb4ada7d80?s=96&d=mm&r=g\",\"caption\":\"DSE_2023_24_G09\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dse202324g09\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lector de tarjetas - 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\/lector-de-tarjetas\/","og_locale":"es_ES","og_type":"article","og_title":"Lector de tarjetas - Proyectos con Arduino.","og_description":"Realizado por Lucas Rodr\u00edguez Bravo, Rodrigo Due\u00f1as Herrero y Luc\u00eda \u00c1lvarez Bl\u00e1zquez 1-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Objetivos y planteamiento del proyecto La primera idea que se tuvo a la hora de plantear el proyecto fue realizar un&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2023-12-20T21:35:17+00:00","article_modified_time":"2024-01-25T12:29:04+00:00","og_image":[{"width":493,"height":370,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png","type":"image\/png"}],"author":"DSE_2023_24_G09","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"DSE_2023_24_G09","Tiempo de lectura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/"},"author":{"name":"DSE_2023_24_G09","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/0fca7b919e05fa109678c7941a93b533"},"headline":"Lector de tarjetas","datePublished":"2023-12-20T21:35:17+00:00","dateModified":"2024-01-25T12:29:04+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/"},"wordCount":2323,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png","keywords":["Arduino","urjc"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/","name":"Lector de tarjetas - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png","datePublished":"2023-12-20T21:35:17+00:00","dateModified":"2024-01-25T12:29:04+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-81.png","width":493,"height":370},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/lector-de-tarjetas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Lector de tarjetas"}]},{"@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\/0fca7b919e05fa109678c7941a93b533","name":"DSE_2023_24_G09","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/6645be1d2228a9c539b54940aefee6c2035be05cf7fb2f3eb03d82cb4ada7d80?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6645be1d2228a9c539b54940aefee6c2035be05cf7fb2f3eb03d82cb4ada7d80?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6645be1d2228a9c539b54940aefee6c2035be05cf7fb2f3eb03d82cb4ada7d80?s=96&d=mm&r=g","caption":"DSE_2023_24_G09"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dse202324g09\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7757","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\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=7757"}],"version-history":[{"count":2,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7757\/revisions"}],"predecessor-version":[{"id":7805,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7757\/revisions\/7805"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/7790"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=7757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=7757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=7757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}