{"id":1000,"date":"2024-06-29T17:06:47","date_gmt":"2024-06-29T15:06:47","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1000"},"modified":"2024-07-06T22:48:30","modified_gmt":"2024-07-06T20:48:30","slug":"rust-embebido-arduino-e-s-digitales-parte-2","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/","title":{"rendered":"Rust-Embebido \u00abArduino\u00bb E\/S Digitales parte 2"},"content":{"rendered":"\n<p>Hoy hablamos de la programaci\u00f3n de las E\/S digitales es una de las partes m\u00e1s sencillas pero a su vez de lo que m\u00e1s utilizamos.<\/p>\n\n\n\n<p>Una E\/S Digital solo toma dos valores Alto (en nuestro Arduino se representa por +5V) o Bajo que seran 0V.<\/p>\n\n\n\n<p>El c\u00f3digo ejemplo de este POST se encuentra en <a href=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/digitales.rs\">https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/digitales.rs<\/a> y es un ejemplo sencillo que consiste en tener tres leds(salidas digitales) y un bot\u00f3n (entrada digital) de forma que uno parpadea ya que cambia su valor cada vez que pasa por el bucle,  y los otros dos cambian seg\u00fan la pulsaci\u00f3n del bot\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Al pulsarlo uno de ellos alterna su valor (enciende o apaga) <\/li>\n\n\n\n<li>El otro se mantienen encendido mientras tenemos pulsado el bot\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Tenemos 14 pines digitales algunos de ellos tienen otras funciones y algunos se podr\u00e1n utilizar como salidas PWM que hablaremos en otro POST.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"484\" height=\"486\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image.png\" alt=\"\" class=\"wp-image-1014\" style=\"width:308px;height:auto\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image.png 484w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-300x300.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-150x150.png 150w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/figure>\n\n\n\n<p>En la tabla A podemos ver su identificador, que utilizaremos en la programaci\u00f3n, as\u00ed como el puerto  (es como se agrupan los pines en el <em>Atmega328<\/em> y cuenta con 3 \u00ab<strong>B C y D<\/strong>\u00ab) en el caso de las E\/S Digitales solo se usan los puertos <strong>B<\/strong> y <strong>D<\/strong> y las interrupciones que podremos utilizar al hablar de interrupciones externas que se activan al activar el PIN.<\/p>\n\n\n\n<p>Los m\u00e9todos para utilizar estos pines son los siguientes:<\/p>\n\n\n\n<p>M\u00e9todos de estos pines en digital:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong> into_output()<\/strong> Define el pin como salida.<\/li>\n\n\n\n<li><strong>into_output_high()<\/strong> Lo define como salida y lo pone en alto.<\/li>\n\n\n\n<li><strong>into_floating_input() y into_pull_up_input()<\/strong> Define el pin como entrada, si usamos el segundo m\u00e9todo habilita el Pull interno para que no tengamos que montarlo nosotros en nuestro circuito. Por defecto los pines se configuran como entrada.<\/li>\n\n\n\n<li><strong>is_high() is_low()<\/strong> Comprueba si esta a nivel esta en estado <em>Alto<\/em> o <em>Bajo<\/em>.<\/li>\n\n\n\n<li><strong>toggle()<\/strong> Cambia su estado del pin.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Comentando un poco el <a href=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/digitales.rs\">c\u00f3digo<\/a> que podemos descargar del enlace anterior, ya que esta programaci\u00f3n es muy sencilla. Lo primero que hacemos es configurar los pines<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Obtenemos los pines disponibles en nuestro arduino\nlet dp = arduino_hal::Peripherals::take().unwrap();\nlet pins = arduino_hal::pins!(dp);\n\n\/\/ Configuramos los pines\nlet mut led1 = pins.d12.into_output_high();  \/\/ El pin digital 12 se define como salida y se pone HIGH\nlet mut led2 = pins.d11.into_output();       \/\/ El pin 11 simplemente se define como salida\nlet boton = pins.d2;                         \/\/ El pin 2 conectado al bot\u00f3n es una entrada.<\/code><\/pre>\n\n\n\n<p>Despu\u00e9s ya solo nos queda usar los m\u00e9todos indicados anteriormente para activar\/desactivar una salida o comprobar el estado de una entrada<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>led3.toggle();   \/\/ Cambia el estado de una salida.\nif boton.is_high()   \/\/ Comprueba si el estado de una entrada digital esta en alto (+5V)\n\nled2.set_high(); \/\/ Pone una salida a Alto (+5V) si estaba ya en alto se mantiene.\nled2.set_low(); \/\/ En este caso pone la salida a bajo (0V)<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Con esto terminamos la segunda parte, recomiendo primero leer el anterior POST  \u00ab<a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/09\/rust-embebido-arduino-introduccion-parte-1\/\" data-type=\"post\" data-id=\"994\">Rust-Embebido \u00abArduino\u00bb Introducci\u00f3n parte 1<\/a>\u00bb y esperar a las siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uso de las entradas anal\u00f3gicas ADC<\/li>\n\n\n\n<li>Uso de los pines PWM<\/li>\n\n\n\n<li>Uso de interrupciones externas.<\/li>\n\n\n\n<li>Timer usando servomotores<\/li>\n\n\n\n<li>Timer para uso del sonar HC-SR04<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy hablamos de la programaci\u00f3n de las E\/S digitales es una de las partes m\u00e1s sencillas pero a su vez de lo que m\u00e1s utilizamos. Una E\/S Digital solo toma dos valores Alto (en nuestro Arduino se representa por +5V) o Bajo que seran 0V. El c\u00f3digo ejemplo de este POST se encuentra en https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/digitales.rs [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[3,186],"tags":[23,187],"class_list":["post-1000","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-rust","tag-arduino","tag-rust"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1000","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1000"}],"version-history":[{"count":3,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1000\/revisions"}],"predecessor-version":[{"id":1083,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1000\/revisions\/1083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/996"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1000"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1000"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1000"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}