{"id":4971,"date":"2010-11-13T12:06:44","date_gmt":"2010-11-13T11:06:44","guid":{"rendered":"https:\/\/www.diarioelectronicohoy.com\/blog\/?p=4971"},"modified":"2021-03-13T10:24:38","modified_gmt":"2021-03-13T09:24:38","slug":"contador-decimal-arriba-abajo","status":"publish","type":"post","link":"https:\/\/www.diarioelectronicohoy.com\/blog\/contador-decimal-arriba-abajo","title":{"rendered":"Contador decimal arriba abajo."},"content":{"rendered":"\r\n<p class=\"has-text-align-center\"><strong>CONTADOR DIGITAL ARRIBA ABAJO.<\/strong><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">INTRODUCCI\u00d3N.<\/h2>\r\n\r\n\r\n\r\n<p>En gran cantidad de dispositivos actuales se puede encontrar un contador electr\u00f3nico, son innumerables los elementos que incorporan alg\u00fan tipo de contador electr\u00f3nico. Del mismo modo hay en libros o art\u00edculos de electr\u00f3nica o en la misma red, donde se describen contadores, sencillos o m\u00e1s complejos, pero todos dise\u00f1ados con el mismo fin, contar unos eventos que se producen con cierta regularidad, aunque a veces no tanto.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">EL CONTADOR.<\/h2>\r\n\r\n\r\n\r\n<p>En unos de mis viejos art\u00edculos se describe un contador de dos d\u00edgitos capaz de mostrar registros desde 00 a 99 mediante circuitos integrados est\u00e1ndar. Estoy refiri\u00e9ndome al art\u00edculo\u00a0contador de 00 a 99, en aquel caso se trataba de un contador realizado mediante circuitos integrados de tipo comercial de la serie CMOS 4000 (serie cuatro mil). Sin embargo en esta ocasi\u00f3n, aprovechando las posibilidades que nos ofrecen los microcontroladores y en concreto Arduino, tratar\u00e9 de describir c\u00f3mo realizar uno de estos contadores de eventos. El detector de entrada, puede ser cualquier sensor y de cualquier forma, lo importante es que, entregue una se\u00f1al digital adecuada, para su lectura.<\/p>\r\n\r\n\r\n\r\n<p>En principio vamos a implementar mediante una rutina un sistema antirrebote\u00a0<strong>debouncing<\/strong>\u00a0en ingl\u00e9s que sea fiable. Dos pulsadores para proporcionar los pulsos que vamos a contar, uno para incrementar y el otro para decrementar la cuenta. Por lo tanto, nos serviremos de una variable\u00a0<strong>val<\/strong>\u00a0para leer si se presiona el pulsador y otra variable\u00a0<strong>val2<\/strong>\u00a0para comparar con la lectura anterior. De esta forma podemos saber si ha cambiado el estado de la entrada. Una variable\u00a0<strong>botonStado<\/strong>\u00a0que guarde el estado del pulsador y la variable\u00a0<strong>buttonCounter<\/strong>\u00a0que guarde el n\u00famero de pulsaciones. Con estas variables, vamos a crear un c\u00f3digo que lleve la cuenta a medida que \u00e9sta cambie y la muestre en el monitor serie de Arduino, as\u00ed, siempre habr\u00e1 constancia de las pulsaciones que se han producido.<\/p>\r\n\r\n\r\n\r\n<p>Vamos a empezar por escribir el listado del c\u00f3digo que sea capaz de contar y mostrar la cuenta desde 0 hasta 99, este tope se puede modificar a gusto del usuario. De esta forma abordaremos los pasos poco a poco de manera que podamos resolverlos con seguridad para no abandonar por que los problemas nos abrumen.<\/p>\r\n\r\n\r\n\r\n<p>En primer lugar declaramos las\u00a0<strong>variables<\/strong>:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">int switchPin = 8; \/\/ switch se conecta al pin 8 \r\nint ledPin = 2;    \/\/ el LED se conecta al pin 2 \r\nint val; \/\/ variable para lectura del estado del pin \r\nint val2; \/\/ variable para leer el estado delayed\/debounced \r\nint botonStado; \/\/ variable para mantener el estado del bot\u00f3n \r\nint buttonCounter =0 ; \/\/ contador para el n\u00famero de pulsos de bot\u00f3n<\/pre>\r\n\r\n\r\n\r\n<p>Ahora, vamos a configurar el\u00a0<em>setup()<\/em>\u00a0donde estableceremos los pines de entrada y la comunicaci\u00f3n serie para presentar los resultados en el monitor serie, veamos:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">void setup() {\r\npinMode(switchPin, INPUT); \/\/ pone el pin switch como entrada\r\npinMode(ledPin, OUTPUT);\r\nSerial.begin(9600); \/\/ Comunicaci\u00f3n serie puesta a 9600bps\r\nbotonStado = digitalRead(switchPin); \/\/ lee el estado inicial<\/pre>\r\n\r\n\r\n\r\n<p>En el\u00a0<em>loop()<\/em>\u00a0tenemos una primera lectura del pin\u00a0<strong>switchPin<\/strong>\u00a0seguido de una segunda lectura del mismo pin, estas dos lecturas se comparan y si coinciden se considera valida la lectura, evitando as\u00ed el efecto\u00a0<em>rebote<\/em>\u00a0o\u00a0<em>debouncing<\/em>.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">void loop(){\r\nval = digitalRead(switchPin);\r\ndelay(10); \/\/ int\u00e9rvalo de 10 milisegundos son una cantidad buena de tiempo\r\nval2 = digitalRead(switchPin);\r\nif (val == val2) { \/\/ asegurar que conseguimos 2 lecturas constantes<\/pre>\r\n\r\n\r\n\r\n<p>El resto del c\u00f3digo est\u00e1 igualmente descrito y creo que no es necesario entrar en m\u00e1s detalle, este es el listado del c\u00f3digo, puede copiarlo y pegarlo en su editor de texto preferido, gu\u00e1rdelo con el nombre\u00a0<em>contador_incremental_doble.pde<\/em>\u00a0u otro nombre apropiado para seguir el proyecto.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">CONTADOR INCREMENTAL DOS D\u00cdGITOS\u00a0<\/h4>\r\n\r\n\r\n\r\n<p>Este es el c\u00f3digo para el programa contador incremental de dos d\u00edgitos.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/*\r\n * contadordepulsos.pde\r\n *\r\n * Contador de dos d\u00edgitos de 00 a 99\r\n * \r\n * Cada vez el pin de entrada va de ALTO a BAJO, el pin de salida \r\n * es basculado de ALTO a BAJO o de BAJO a ALTO. Hay un retraso \r\n * m\u00ednimo entre basculados para evitar los rebotes del circuito.\r\n *\r\n * Fecha: 30\/08\/10 \r\n * Autor: V. Garcia\r\n * \r\n *\/ \r\n\r\nint switchPin = 8; \/\/ switch se conecta al pin 8\r\nint ledPin = 2; \/\/ el LED se conecta al pin 2\r\n\r\nint val; \/\/ variable para lectura del estado del pin \r\nint val2; \/\/ variable para leer el estado delayed\/debounced\r\nint botonStado; \/\/ variable para mantener el estado del bot\u00f3n\r\nint buttonCounter =0 ; \/\/ contador para el n\u00famero de pulsos de bot\u00f3n\r\n\r\nint lightMode = 0; \/\/ Esta la luz EN o AP\r\n\r\nvoid setup() {\r\n    pinMode(switchPin, INPUT); \/\/ pone el pin switch como entrada\r\n    pinMode(ledPin, OUTPUT);\r\n    Serial.begin(9600); \/\/ Comunicaci\u00f3n serie puesta a 9600bps\r\n    botonStado = digitalRead(switchPin); \/\/ lee el estado inicial\r\n   \/\/ buttonCounter = 92; \/\/ lo uso para saltarme los 91 primeros. Despues se quita\r\n}\r\n\r\n void loop(){\r\n    val = digitalRead(switchPin); \/\/ lee el valor de entrada y almac\u00e9nlo en val\r\n    delay(10); \/\/ 10 milisegundos son una cantidad de tiempo buena\r\n    val2 = digitalRead(switchPin); \/\/ lee la entrada otra vez para comprobar saltos\r\n    if (val == val2) { \/\/ aseg\u00farar que conseguimos 2 lecturas constantes\r\n     if (val != botonStado) { \/\/ el estado de bot\u00f3n ha cambiado!\r\n     if (val == LOW) { \/\/ compruebe si el bot\u00f3n es presionado \r\n     buttonCounter + + ; \r\n      if (lightMode == 0) { \/\/ esta la luz AP?\r\n      lightMode = 1; \/\/ conecta la luz!\r\n      digitalWrite(ledPin, HIGH); \r\n     } else {\r\n    lightMode = 0; \/\/ apaga la luz!\r\n    digitalWrite(ledPin, LOW); \r\n    }\r\n    Serial.print(\u00abN\u00famero de pulsaciones: \u00ab); \/\/ muestro las\r\n     if (buttonCounter &lt;10) Serial.print(\u00ab0\u00bb); \/\/ pulsaciones\r\n     Serial.println(buttonCounter, DEC); \/\/ habidas\r\n    } \r\n    if (buttonCounter &gt;= 99){\r\n    buttonCounter = 0; \r\n    } \r\n   }\r\n    botonStado = val; \/\/ guardar el nuevo estado en la variable\r\n    } \r\n }<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Si ha seguido los pasos descritos hasta ahora, es de suponer que todo ha salido bien. Abra el monitor serie de Arduino y observe los cambios producidos al pulsar los pulsadores. En caso contrario, vuelva sobre sus pasos y analice donde est\u00e1 el error cometido, para poder seguir. Con esto, tenemos resuelta la primera parte del proyecto que hab\u00edamos planteado al principio. Qu\u00e9 ha observado con los resultados, \u00a1ah! que no funciona siempre la cuenta \u00bfqu\u00e9 puede ser?, vamos a solucionar este problema de una forma sencilla, pongamos una l\u00ednea m\u00e1s en el c\u00f3digo, en concreto en el\u00a0<em>setup()<\/em>:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">void setup() {\r\npinMode(switchPin, INPUT); \/\/ pone el pin switch como entrada\r\ndigitalWrite(channelPinA, HIGH);\/\/ activa la resistencia de pull-up.\r\n...<\/pre>\r\n\r\n\r\n\r\n<p>Esta simple orden activa la resistencia interna de pull-up del pin indicado, inserte esta l\u00ednea en el c\u00f3digo y compruebe que ahora si funciona bien. Observe que aunque deje presionado el pulsador el contador avanza una sola cuenta por cada pulsaci\u00f3n y cuando llega a 99 la cuenta se inicia denuevo.<\/p>\r\n\r\n\r\n\r\n<p>Analizando lo que hemos hecho, podemos abordar la segunda parte; la cual, deducimos que se puede considerar una copia casi id\u00e9ntica del anterior c\u00f3digo, naturalmente hay que realizar alg\u00fan cambio para que sirva nuestros intereses. Veamos estos puntos a modificar.<\/p>\r\n\r\n\r\n\r\n<p>En primer lugar, la cuenta de las pulsaciones deber\u00e1 ser llevada igualmente por una variable\u00a0<em>vval<\/em>\u00a0que guarde las pulsaciones. Como en el caso anterior,\u00a0<em>vval2<\/em>\u00a0ser\u00e1 la variable que usaremos para evitar el rebote mec\u00e1nico del pulsador.<\/p>\r\n\r\n\r\n\r\n<p>Probemos este c\u00f3digo, \u00a1ah!, pero antes hagamos los cambios. Para hacer m\u00e1s f\u00e1cil las modificaciones, a\u00f1adiremos un 2 a las variables, exceptuando\u00a0<strong>val<\/strong>\u00a0y\u00a0<strong>val2<\/strong>, a las que antepondremos una\u00a0<strong>v<\/strong>. Por supuesto que modificaremos el n\u00famero del pin en el caso de la entrada del pulsador (switchPin2 = 9) y la salida del LED (ledPin2 = 3) que ocuparan los pines libres que siguen al anterior.<\/p>\r\n\r\n\r\n\r\n<p>La l\u00ednea que representa el contador, se bebe modificar ya que ahora el contador disminuye o sea, es regresivo. Con esto, cada presi\u00f3n del pulsador se identifica con la resta de un d\u00edgito sobre la cuenta anterior. Esta es la nueva forma del \u00ab<strong>contador<\/strong>\u00ab.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">if (vval == LOW) {    \/\/ compruebe si el bot\u00f3n es presionado \r\n   buttonCounter2  -- ;   <\/pre>\r\n\r\n\r\n\r\n<p>Esta l\u00ednea que sigue, tampoco es necesaria:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">\/\/ if (buttonCounter2 &gt; -10)  Serial.print(\"0\"); \/\/  pulsaciones<\/pre>\r\n\r\n\r\n\r\n<p>Ya que en este caso, no creo necesario anteponer un \u00ab<strong>0<\/strong>\u00bb al contador.<\/p>\r\n\r\n\r\n\r\n<p>Sin embargo es conveniente prestar atenci\u00f3n al contador ya que estamos en sentido regresivo y el signo\u00a0<strong>\u2013<\/strong>\u00a0(menos), puede causarnos alg\u00fan retraso en conseguir la soluci\u00f3n. Hay que prestar atenci\u00f3n a la comparaci\u00f3n, siga los pasos del c\u00f3digo y comprender\u00e1 mejor el funcionamiento.<\/p>\r\n\r\n\r\n\r\n<p>Este es el c\u00f3digo del contador regresivo, lo puede y pegarlo en su editor de texto y compilarlo, para comprobar su efectividad.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">CONTADOR REGRESIVO DE DOS D\u00cdGITOS.<\/h4>\r\n\r\n\r\n\r\n<p>Este es el c\u00f3digo para el programa del contador regresivo de dos d\u00edgitos.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/*\r\n * Contadorregresivo.pde\r\n \u2026\r\n *\r\n * Fecha: 30\/08\/10 \r\n * Autor: V. Garcia\r\n * \r\n *\/ \r\nint switchPin2 = 9; \/\/ switch se conecta al pin 9\r\nint ledPin2 = 3; \/\/ el LED se conecta al pin 3\r\n\r\nint vval; \/\/ variable para lectura del estado del pin \r\nint vval2; \/\/ variable para leer el estado delayed\/debounced\r\nint botonStado2; \/\/ variable para mantener el estado del bot\u00f3n\r\nint buttonCounter2 = 0 ; \/\/ contador para el n\u00famero de pulsos de bot\u00f3n\r\n\r\nint lightMode2 = 0; \/\/ Esta la luz EN o AP\r\n\r\nvoid setup() { \r\n pinMode(switchPin2, INPUT); \/\/ pone el pin switch como entrada\r\n pinMode(ledPin2, OUTPUT);\r\n Serial.begin(9600); \/\/ Comunicaci\u00f3n serie puesta a 9600bps\r\n botonStado2 = digitalRead(switchPin2); \/\/ lee el estado inicial\r\n\/\/ buttonCounter2 = -92; \/\/ lo uso para saltarme los 91 primeros. Despu\u00e9s se quita\r\n}\r\nvoid loop(){\r\n vval = digitalRead(switchPin2); \/\/ lee el valor de entrada y almac\u00e9nalo en val\r\n delay(10); \/\/ 10 milisegundos son una cantidad de tiempo buena\r\n vval2 = digitalRead(switchPin2); \/\/ lee la entrada otra vez para comprobar saltos\r\n if (vval == vval2) { \/\/ asegurar que conseguimos 2 lecturas constantes\r\n if (vval != botonStado2) { \/\/ el estado de bot\u00f3n ha cambiado!\r\n if (vval == LOW) { \/\/ compruebe si el bot\u00f3n es presionado \r\n buttonCounter2 \u2014 ; \r\n if (lightMode2 == 0) { \/\/ esta la luz AP?\r\n lightMode2 = 1; \/\/ conecta la luz!\r\n digitalWrite(ledPin2, HIGH); \r\n } else {\r\n lightMode2 = 0; \/\/ apaga la luz!\r\n digitalWrite(ledPin2, LOW); \r\n }\r\n Serial.print(\u00abNumero de pulsaciones: \u00ab); \/\/ muestro las\r\n\/\/ if (buttonCounter2 &gt; -10) Serial.print(\u00ab0\u00bb); \/\/ pulsaciones\r\n\r\n Serial.println(buttonCounter2, DEC); \/\/ habidas\r\n } \r\n if (buttonCounter2 &lt;= -99){\r\n buttonCounter2 = 0; \r\n } \r\n }\r\n botonStado2 = vval; \/\/ guardar el nuevo estado en la variable\r\n } \r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\" style=\"text-align: center;\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4974 aligncenter\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2020\/04\/contador-regresivo.jpg\" alt=\"\" width=\"500\" height=\"308\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2020\/04\/contador-regresivo.jpg 682w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2020\/04\/contador-regresivo-300x185.jpg 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/>\r\n<figcaption>Fig. 1<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">COMBINAR LOS DOS C\u00d3DIGOS.<\/h3>\r\n\r\n\r\n\r\n<p>Hemos logrado que los dos c\u00f3digos realicen lo que ten\u00edamos previsto. Eso s\u00ed, los contadores, cuentan, cada uno en su direcci\u00f3n, como lo hab\u00edamos previsto. El caso es que ambos programas deben formar parte de un mismo c\u00f3digo. Este es el reto actual \u00bfC\u00f3mo lo vamos a abordar?<\/p>\r\n\r\n\r\n\r\n<p>Debe observarse que se han realizado unos peque\u00f1os cambios en cada subrutina, de modo que puedan compartir el c\u00f3digo y cumplan con lo previsto. Se ha creado una nueva subrutina para la presentaci\u00f3n en el monitor serie de Arduino, los resultados que se van produciendo en la medida que se generan las pulsaciones.<\/p>\r\n\r\n\r\n\r\n<p>Esta rutina la he llamado\u00a0<strong>anota()<\/strong>, por que eso es lo que hace. La he sacado fuera del c\u00f3digo principal para que si al interesado no le aporta informaci\u00f3n en su aplicaci\u00f3n, pueda prescindir de ella, eliminando las llamadas a dicha rutina y la misma.<\/p>\r\n\r\n\r\n\r\n<p>En el listado que sigue, puede observarse lo descrito. Si est\u00e1 interesado en el c\u00f3digo, para su utilizaci\u00f3n, como siempre copie y guarde con un nombre significativo, \u00e1bralo en su editor de texto preferido y comp\u00edlelo con su Arduino, para cargarlo y comprobar su buen funcionamiento.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">CONTADOR ARRIBA-ABAJO.<\/h4>\r\n\r\n\r\n\r\n<p>Este es el c\u00f3digo completo para el programa de contador arriba-abajo.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>\/*\r\n\/*\r\n * contador_arriba_abajo.pde\r\n *\r\n * Contador de dos d\u00edgitos de 00 a 99 y a 00.\r\n *\r\n * En el monitor, muestra los pulsos de cada pulsador y tambien\r\n * muestra el total de pulsaciones entre ambos pulsadores.\r\n *\r\n * Cada vez que presionamos un pulsador, el pin de salida correspondiente\r\n * bascula de ALTO a BAJO o de BAJO a ALTO. Hay un retardo\r\n * m\u00e1ximo entre pulsos para evitar los rebotes del circuito.\r\n *\r\n * Fecha: 31\/08\/10\r\n * Autor: V. Garcia\r\n *\r\n * Consume 2984 bytes compilado con version 0013Alpha.\r\n *\/\r\n\r\nint switchPin = 8; \/\/ switch se conecta al pin 8\r\nint switchPin2 = 9; \/\/ switch se conecta al pin 9\r\nint ledPin = 2; \/\/ el LED se conecta al pin 2\r\n int ledPin2 = 3; \/\/ el LED se conecta al pin 3\r\n\r\n int val = 0; \/\/ variable para lectura del estado del pin\r\n int val2 = 0; \/\/ variable para leer el estado delayed\/debounced\r\n int vval = 0; \/\/ variable para lectura del estado del pin\r\n int vval2 = 0; \/\/ variable para leer el estado delayed\/debounced\r\n\r\n int botonStado; \/\/ variable para mantener el estado del bot\u00f3n\r\n int botonStado2; \/\/ variable para mantener el estado del bot\u00f3n\r\n\r\n int buttonCounter =0 ; \/\/ contador para el n\u00famero de pulsos de bot\u00f3n\r\n int buttonCounter2 =0 ; \/\/ contador para el n\u00famero de pulsos de bot\u00f3n\r\n\r\n int lightMode = 0; \/\/ Esta la luz EN o AP\r\n int lightMode2 = 0; \/\/ Esta la luz EN o AP\r\n\r\n void setup() {\r\n   pinMode(switchPin, INPUT); \/\/ pone el pin switch como entrada\r\n   digitalWrite(switchPin, HIGH);\r\n   pinMode(switchPin2, INPUT); \/\/ pone el pin switch como entrada\r\n   digitalWrite(switchPin2, HIGH);\r\n   pinMode(ledPin, OUTPUT);\r\n   pinMode(ledPin2, OUTPUT);\r\n   Serial.begin(9600); \/\/ Comunicaci\u00f3n serie puesta a 9600bps\r\n   botonStado = digitalRead(switchPin); \/\/ lee el estado inicial\r\n   botonStado2 = digitalRead(switchPin2); \/\/ lee el estado inicial\r\n\r\n  \/\/ buttonCounter = 92; \/\/ lo uso para saltarme los 91 primeros. Despu\u00e9s se quita\r\n   Serial.println(\u00abcontador_00a99_00.ino Listo \\n\u00bb);\r\n }\r\n\r\n void loop(){ \r\n \/\/ Incrementa \/\/\r\n  val = digitalRead(switchPin); \/\/ lee el valor de entrada y almacena en val\r\n  delay(10); \/\/ 10 milisegundos son una cantidad de tiempo buena\r\n  val2 = digitalRead(switchPin); \/\/ lee la entrada otra vez para comprobar saltos\r\n  if (val == val2) { \/\/ asegurar que conseguimos 2 lecturas constantes\r\n  if (val != botonStado) { \/\/ el estado de bot\u00f3n ha cambiado!\r\n   if (val == LOW) { \/\/ compruebe si el bot\u00f3n es presionado\r\n    if (lightMode == 0) { \/\/ esta la luz AP?\r\n    lightMode = 1; \/\/ conecta la luz!\r\n    digitalWrite(ledPin, HIGH);\r\n   } else {\r\n   lightMode = 0; \/\/ apaga la luz!\r\n  digitalWrite(ledPin, LOW);\r\n   }\r\n   buttonCounter ++ ;\r\n   anota();\r\n   }\r\n  if (buttonCounter &gt;= 99){\r\n  buttonCounter = 0;\r\n  }\r\n   }\r\n   botonStado = val; \/\/ guardar el nuevo estado en la variable\r\n  }\r\n \/\/ Decrementa \/\/\r\n  vval = digitalRead(switchPin2); \/\/ lee el valor de entrada y almacena en val\r\n  delay(10); \/\/ 10 milisegundos son una cantidad de tiempo buena\r\n  vval2 = digitalRead(switchPin2); \/\/ lee la entrada otra vez para comprobar saltos\r\n  if (vval == vval2) { \/\/ asegurar que conseguimos 2 lecturas constantes\r\n   if (vval != botonStado2) { \/\/ el estado de bot\u00f3n ha cambiado!\r\n  if (vval == LOW) { \/\/ compruebe si el bot\u00f3n es presionado\r\n   if (lightMode2 == 0) { \/\/ esta la luz AP?\r\n   lightMode2 = 1; \/\/ conecta la luz!\r\n   digitalWrite(ledPin2, HIGH);\r\n   } else {\r\n    lightMode2 = 0; \/\/ apaga la luz!\r\n    digitalWrite(ledPin2, LOW);\r\n   }\r\n    buttonCounter2 \u2014 ;\r\n    anota();\r\n   }\r\n   if (buttonCounter2 &lt;= -99){\r\n    buttonCounter2 = 0;\r\n    if (buttonCounter &lt;= -99){\r\n    buttonCounter = 0; \r\n   }\r\n   }\r\n   botonStado2 = vval; \/\/ guardar el nuevo estado en la variable\r\n   }\r\n  }\r\n }\r\nvoid anota() { \r\n  Serial.print(\u00bb Cuenta: \u00ab); \/\/ muestro las \r\n  Serial.print(buttonCounter + buttonCounter2, DEC); \/\/ habidas\r\n\r\n  Serial.print(\u00bb Total pulsaciones: \u00ab);\r\n  Serial.println(buttonCounter + buttonCounter2*-1, DEC);\r\n }<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Ahora, ya puede disfrutar de un doble contador de eventos. Piense usted en una aplicaci\u00f3n para darle una utilidad, por ej. con unos pocos cambios un contador para una cancha deportiva. Es una idea.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\" style=\"text-align: center;\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4976 aligncenter\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2020\/04\/contador00a99a00.jpg\" alt=\"\" width=\"529\" height=\"326\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2020\/04\/contador00a99a00.jpg 682w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2020\/04\/contador00a99a00-300x185.jpg 300w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/>\r\n<figcaption>Fig. 2<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p>En la figura 2 se muestra el monitor serie con las cuentas. Como siempre, comentarios, criticas y sugerencias para mejorar este art\u00edculo, son bienvenidos y apreciados.<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>CONTADOR DIGITAL ARRIBA ABAJO. INTRODUCCI\u00d3N. En gran cantidad de dispositivos actuales se puede encontrar un contador electr\u00f3nico, son innumerables los elementos que incorporan alg\u00fan tipo de contador electr\u00f3nico. Del mismo modo hay en libros o art\u00edculos de electr\u00f3nica o en la misma red, donde se describen contadores, sencillos o m\u00e1s complejos, pero todos dise\u00f1ados con [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":4974,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[22,372],"tags":[174,371,370],"class_list":["post-4971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-contador-decimal-arriba-abajo","tag-contador","tag-decimal","tag-digital"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/4971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/comments?post=4971"}],"version-history":[{"count":8,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/4971\/revisions"}],"predecessor-version":[{"id":5443,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/4971\/revisions\/5443"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media\/4974"}],"wp:attachment":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media?parent=4971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/categories?post=4971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/tags?post=4971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}