La función de Arduino pinMode permite configurar a cada pin, de forma individual, como entrada o como salida. Aquí te explicamos su uso con ejemplos.También está función es usada en conjunto con digitalWrite y digitalRead. Por lo general, pinMode es usado sólo en la función setup().
Sintaxis:
pinMode(#PIN, Modo);
Parámetros de entrada:
- #PIN. Es el numero del pin que se quiere configurar, este numero esta escrito en la tarjeta Arduino que se usara.
- Modo. Puede ser tres opciones:
- INPUT. Configura al pin como entrada.
- INPUT_PULLUP. Se le agrega al pin una resistencia de pull-up interna y se configura como entrada.
- OUTPUT. El pin se configura como salida digital.
Parámetros de salida:
- Ninguno
Funciones complementarias:
- digitalWrite();
- digitalRead();
La función Arduino pinMode usada para las tarjetas, es indispensable para cualquier aplicación donde se requiere usar entradas o salidas digitales. Previamente, la historia de está función comienza con la forma en la que se configuran a las entradas y salidas usando el lenguaje C para un microcontrolador AVR. Esta arquitectura es la que utiliza un Arduino UNO R3. Originalmente la función de configuración esta controlada por el registro de propósito específico llamado DDRX, donde la X representa el puerto a configurar. Por ejemplo, si tomamos en cuanta a un Arduino UNo, cuyo micro es el ATMEGA328P, vemos que los pines del 0 al 13 están conectados en realidad a los puertos D, C y B. Finalmente, la Figura-1, muestra las banderas de los registros B, C y D conectadas a cada pin.
En otras palabras, para controlar la configuración de entrada/salida la función de Arduino pinMode escribe y configura a los registros DDRB, DDRC y DDRD. Por ejemplo, la bandera 0 del registro DDRB configura directamente al pin 8 para una tarjeta Arduino UNO R3. Entonces, si esta bandera vale ‘1’ el pin se configura como salida. Por el contrario si vale ‘0’ se configura como entrada.
Figura-1. Puerto B, C y D conectados a los pines de Arduino. Se muestran las banderas asociadas a cada pin.
Arduino pinMode Códigos de ejemplo
Por ejemplo, el siguiente código permitirá configurar al pin D0 como salida. Este pin corresponde al pin 8 de una tarjeta Arduino UNO.
DDRB = (DDRB & 0b11111110 ) | 0x01 ; |
El código anterior equivale a la función de pinMode:
pinMode(8,OUTPUT); |
Por el contrario, las siguientes instrucciones equivalentes, configurarían al mismo pin como entrada.
DDRB = (DDRB & 0b11111110 ) ;
pinMode(8,INPUT);
Las siguientes tres instrucciones son equivalentes para configurar al pin 13 como salida. Las operaciones lógicas que se aplican al registro DDRB son enmascaramientos (& – operación lógica AND) para no afectar a las banderas de los otros pines y sumas logias (|) para configurar a la bandera como salida (1) o como entrada (0).
//DDRB = (DDRB & 0b11011111 ) | 0b00100000 ;
DDRB = (DDRB & 0xDF) | 0x20 ;
//pinMode(13,OUTPUT);
Ejemplo de blink con Arduino pinMode y con DDRB
Entonces usar al registro DDRB es una alternativa a la función pinMode();.
Fuentes:
[1] – https://rua.ua.es/dspace/bitstream/10045/11833/1/arduino.pdf
Autor: Dr. Rubén E-Marmolejo.
Profesor Universidad de Guadalajara, México
muy buen argumento gracias
Hola, podrian ayudarme a entender este codigo? es decir, por que usa una salida con un led y la declara como entrada?
pinMode(inputLED_a, INPUT);
digitalWrite(inputLED_a, LOW);
pinMode(inputLED_b, OUTPUT);
digitalWrite(inputLED_b, HIGH);
delay(delayTime);
pinMode(inputLED_a, INPUT);
digitalWrite(inputLED_a, LOW);
pinMode(inputLED_b, OUTPUT);
digitalWrite(inputLED_b, LOW);
pinMode(inputLED_c, OUTPUT);
digitalWrite(inputLED_c, HIGH);
delay(delayTime);
Podria ser un error, o podrian estar configurando las resistencias de pull-up, pull-down. Cuando un pin esta configurado como entrada y escribes un valor al puerto es como configurar las entradas con resistencias weaks. «If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated.» seccion 13.2.1 de la hoja de datos d eun arduino uno.
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
pinMode(15,2,4,16,17,5,18,19,3,1,21,22,23,OUTPUT);