Arduino - Funciones de E / S

Los pines de la placa Arduino se pueden configurar como entradas o salidas. Explicaremos el funcionamiento de los pines en esos modos. Es importante tener en cuenta que la mayoría de los pines analógicos de Arduino pueden configurarse y usarse exactamente de la misma manera que los pines digitales.

Pines configurados como ENTRADA

Los pines de Arduino están configurados de forma predeterminada como entradas, por lo que no es necesario declararlos explícitamente como entradas con pinMode()cuando los usa como entradas. Se dice que los pines configurados de esta manera están en un estado de alta impedancia. Los pines de entrada hacen demandas extremadamente pequeñas en el circuito que están muestreando, equivalente a una resistencia en serie de 100 megaohmios en frente del pin.

Esto significa que se necesita muy poca corriente para cambiar el pin de entrada de un estado a otro. Esto hace que los pines sean útiles para tareas como implementar un sensor táctil capacitivo o leer un LED como fotodiodo.

Los pines configurados como pinMode (pin, INPUT) sin nada conectado a ellos, o con cables conectados a ellos que no están conectados a otros circuitos, informan cambios aparentemente aleatorios en el estado de los pines, captan ruido eléctrico del entorno o acoplan capacitivamente el estado de un pin cercano.

Resistencias pull-up

Las resistencias pull-up suelen ser útiles para dirigir un pin de entrada a un estado conocido si no hay ninguna entrada. Esto se puede hacer agregando una resistencia pull-up (a + 5V) o una resistencia pull-down (resistencia a tierra) en la entrada. Una resistencia de 10K es un buen valor para una resistencia pull-up o pull-down.

Uso de resistencia pull-up incorporada con pines configurados como entrada

Hay 20.000 resistencias pull-up integradas en el chip Atmega a las que se puede acceder desde el software. Se accede a estas resistencias pull-up incorporadas configurando elpinMode()como INPUT_PULLUP. Esto efectivamente invierte el comportamiento del modo ENTRADA, donde ALTO significa que el sensor está APAGADO y BAJO significa que el sensor está ENCENDIDO. El valor de este pull-up depende del microcontrolador utilizado. En la mayoría de las placas basadas en AVR, se garantiza que el valor estará entre 20 kΩ y 50 kΩ. En el Arduino Due, está entre 50kΩ y 150kΩ. Para conocer el valor exacto, consulte la hoja de datos del microcontrolador en su placa.

Al conectar un sensor a un pin configurado con INPUT_PULLUP, el otro extremo debe estar conectado a tierra. En el caso de un interruptor simple, esto hace que el pin lea ALTO cuando el interruptor está abierto y BAJO cuando se presiona el interruptor. Las resistencias pull-up proporcionan suficiente corriente para encender un LED débilmente conectado a un pin configurado como entrada. Si los LED de un proyecto parecen estar funcionando, pero muy débilmente, es probable que esto sea lo que está sucediendo.

Los mismos registros (ubicaciones de memoria de chip interno) que controlan si un pin es ALTO o BAJO controlan las resistencias de pull-up. En consecuencia, un pin que está configurado para tener resistencias pull-up encendidas cuando el pin está en modo INPUT, tendrá el pin configurado como HIGH si el pin luego se cambia a un modo OUTPUT con pinMode (). Esto también funciona en la otra dirección, y un pin de salida que se deja en un estado ALTO tendrá la resistencia de pull-up configurada si se cambia a una entrada con pinMode ().

Example

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

Pines configurados como SALIDA

Se dice que los pines configurados como SALIDA con pinMode () están en un estado de baja impedancia. Esto significa que pueden proporcionar una cantidad sustancial de corriente a otros circuitos. Los pines Atmega pueden generar (proporcionar corriente positiva) o disipar (proporcionar corriente negativa) hasta 40 mA (miliamperios) de corriente a otros dispositivos / circuitos. Esta es suficiente corriente para iluminar brillantemente un LED (no olvide la resistencia en serie), o hacer funcionar muchos sensores pero no la corriente suficiente para hacer funcionar relés, solenoides o motores.

Intentar ejecutar dispositivos de alta corriente desde los pines de salida, puede dañar o destruir los transistores de salida en el pin, o dañar todo el chip Atmega. A menudo, esto da como resultado un pin "muerto" en el microcontrolador, pero los chips restantes siguen funcionando adecuadamente. Por esta razón, es una buena idea conectar los pines de SALIDA a otros dispositivos a través de resistencias de 470 Ω o 1k, a menos que se requiera la corriente máxima extraída de los pines para una aplicación en particular.

Función pinMode ()

La función pinMode () se utiliza para configurar un pin específico para que se comporte como entrada o como salida. Es posible habilitar las resistencias pull-up internas con el modo INPUT_PULLUP. Además, el modo INPUT deshabilita explícitamente los pull-ups internos.

Sintaxis de la función pinMode ()

Void setup () {
   pinMode (pin , mode);
}
  • pin - el número del pin cuyo modo desea configurar

  • mode - INPUT, OUTPUT o INPUT_PULLUP.

Example

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP); 
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

Función digitalWrite ()

los digitalWrite()La función se utiliza para escribir un valor ALTO o BAJO en un pin digital. Si el pin se ha configurado como SALIDA con pinMode () , su voltaje se establecerá en el valor correspondiente: 5V (o 3.3V en placas de 3.3V) para ALTO, 0V (tierra) para BAJO. Si el pin está configurado como INPUT, digitalWrite () habilitará (HIGH) o deshabilitará (LOW) el pullup interno en el pin de entrada. Se recomienda configurar pinMode () en INPUT_PULLUP para habilitar la resistencia de pull-up interna.

Si no configura pinMode () en OUTPUT y conecta un LED a un pin, al llamar a digitalWrite (HIGH), el LED puede aparecer atenuado. Sin establecer explícitamente pinMode (), digitalWrite () habrá habilitado la resistencia pull-up interna, que actúa como una gran resistencia limitadora de corriente.

Sintaxis de la función digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - el número del pin cuyo modo desea configurar

  • value - ALTO o BAJO.

Example

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () { 
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

función analogRead ()

Arduino es capaz de detectar si hay un voltaje aplicado a uno de sus pines e informarlo a través de la función digitalRead (). Existe una diferencia entre un sensor de encendido / apagado (que detecta la presencia de un objeto) y un sensor analógico, cuyo valor cambia continuamente. Para leer este tipo de sensor, necesitamos un tipo de pin diferente.

En la parte inferior derecha de la placa Arduino, verá seis pines marcados como "Entrada analógica". Estos pines especiales no solo indican si se les aplica un voltaje, sino también su valor. Usando elanalogRead() función, podemos leer el voltaje aplicado a uno de los pines.

Esta función devuelve un número entre 0 y 1023, que representa voltajes entre 0 y 5 voltios. Por ejemplo, si hay un voltaje de 2.5 V aplicado al pin número 0, analogRead (0) devuelve 512.

Sintaxis de la función analogRead ()

analogRead(pin);
  • pin - el número del pin de entrada analógica para leer (0 a 5 en la mayoría de las placas, 0 a 7 en Mini y Nano, 0 a 15 en Mega)

Example

int analogPin = 3;//potentiometer wiper (middle terminal) 
   // connected to analog pin 3 
int val = 0; // variable to store the value read

void setup() {
   Serial.begin(9600); // setup serial
} 

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}