Arduino - Funções de E / S

Os pinos na placa Arduino podem ser configurados como entradas ou saídas. Explicaremos o funcionamento dos pinos nesses modos. É importante observar que a maioria dos pinos analógicos do Arduino pode ser configurada e usada exatamente da mesma maneira que os pinos digitais.

Pinos configurados como INPUT

Os pinos do Arduino são configurados por padrão como entradas, portanto, não precisam ser declarados explicitamente como entradas com pinMode()quando você os está usando como entradas. Os pinos configurados dessa maneira estão em um estado de alta impedância. Os pinos de entrada fazem demandas extremamente pequenas no circuito que eles estão testando, o equivalente a um resistor em série de 100 megaohm na frente do pino.

Isso significa que é necessária muito pouca corrente para alternar o pino de entrada de um estado para outro. Isso torna os pinos úteis para tarefas como a implementação de um sensor de toque capacitivo ou a leitura de um LED como fotodiodo.

Pinos configurados como pinMode (pin, INPUT) sem nada conectado a eles, ou com fios conectados a eles que não estão conectados a outros circuitos, relatam mudanças aparentemente aleatórias no estado do pino, captando ruído elétrico do ambiente ou acoplando capacitivamente o estado de um alfinete próximo.

Resistores pull-up

Os resistores pull-up são frequentemente úteis para direcionar um pino de entrada a um estado conhecido se nenhuma entrada estiver presente. Isso pode ser feito adicionando um resistor pull-up (para + 5V) ou um resistor pull-down (resistor para aterramento) na entrada. Um resistor de 10K é um bom valor para um resistor pull-up ou pull-down.

Usando o resistor pull-up embutido com pinos configurados como entrada

Existem 20.000 resistores pull-up embutidos no chip Atmega que podem ser acessados ​​a partir do software. Esses resistores pull-up integrados são acessados ​​definindo opinMode()como INPUT_PULLUP. Isso efetivamente inverte o comportamento do modo INPUT, onde HIGH significa que o sensor está DESLIGADO e LOW significa que o sensor está LIGADO. O valor deste pull-up depende do microcontrolador usado. Na maioria das placas baseadas em AVR, o valor é garantido entre 20kΩ e 50kΩ. No Arduino Due, está entre 50kΩ e 150kΩ. Para o valor exato, consulte a ficha técnica do microcontrolador da sua placa.

Ao conectar um sensor a um pino configurado com INPUT_PULLUP, a outra extremidade deve ser conectada ao aterramento. No caso de uma chave simples, isso faz com que a leitura do pino seja HIGH quando a chave estiver aberta e LOW quando a chave for pressionada. Os resistores pull-up fornecem corrente suficiente para acender um LED fracamente conectado a um pino configurado como uma entrada. Se os LEDs em um projeto parecem estar funcionando, mas muito fracamente, é provável que seja isso o que está acontecendo.

Os mesmos registros (locais de memória do chip interno) que controlam se um pino é HIGH ou LOW controlam os resistores pull-up. Consequentemente, um pino que é configurado para ter resistores pull-up ligados quando o pino está no modo INPUT, terá o pino configurado como HIGH se o pino for então comutado para um modo OUTPUT com pinMode (). Isso funciona na outra direção também, e um pino de saída que é deixado em um estado HIGH terá o resistor pull-up definido se for comutado para uma entrada com 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

Pinos configurados como OUTPUT

Pinos configurados como OUTPUT com pinMode () são considerados em um estado de baixa impedância. Isso significa que eles podem fornecer uma quantidade substancial de corrente para outros circuitos. Os pinos Atmega podem fornecer (fornecer corrente positiva) ou drenar (fornecer corrente negativa) até 40 mA (miliamperes) de corrente para outros dispositivos / circuitos. Esta é a corrente suficiente para acender intensamente um LED (não se esqueça do resistor em série) ou executar muitos sensores, mas não a corrente suficiente para operar relés, solenóides ou motores.

A tentativa de executar dispositivos de alta corrente a partir dos pinos de saída pode danificar ou destruir os transistores de saída no pino ou danificar todo o chip Atmega. Freqüentemente, isso resulta em um pino "morto" no microcontrolador, mas os chips restantes ainda funcionam adequadamente. Por esse motivo, é uma boa ideia conectar os pinos de SAÍDA a outros dispositivos por meio de resistores de 470Ω ou 1k, a menos que a corrente máxima retirada dos pinos seja necessária para uma aplicação específica.

Função pinMode ()

A função pinMode () é usada para configurar um pino específico para se comportar como uma entrada ou uma saída. É possível habilitar os resistores pull-up internos com o modo INPUT_PULLUP. Além disso, o modo INPUT desabilita explicitamente os pull-ups internos.

Sintaxe da função pinMode ()

Void setup () {
   pinMode (pin , mode);
}
  • pin - o número do pino cujo modo você deseja definir

  • mode - INPUT, OUTPUT ou 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
   }
}

Função digitalWrite ()

o digitalWrite()A função é usada para escrever um valor ALTO ou BAIXO em um pino digital. Se o pino foi configurado como uma SAÍDA com pinMode () , sua tensão será configurada para o valor correspondente: 5 V (ou 3,3 V em placas de 3,3 V) para ALTO, 0 V (terra) para BAIXO. Se o pino estiver configurado como INPUT, digitalWrite () habilitará (HIGH) ou desabilitará (LOW) o pullup interno no pino de entrada. Recomenda-se definir pinMode () para INPUT_PULLUP para habilitar o resistor pull-up interno.

Se você não definir pinMode () para OUTPUT e conectar um LED a um pino, ao chamar digitalWrite (HIGH), o LED pode parecer fraco. Sem definir explicitamente pinMode (), digitalWrite () terá habilitado o resistor pull-up interno, que atua como um grande resistor limitador de corrente.

Sintaxe da função digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - o número do pino cujo modo você deseja definir

  • value - ALTO ou BAIXO.

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
}

função analogRead ()

O Arduino é capaz de detectar se há uma tensão aplicada a um de seus pinos e relatá-la por meio da função digitalRead (). Existe uma diferença entre um sensor liga / desliga (que detecta a presença de um objeto) e um sensor analógico, cujo valor muda continuamente. Para ler este tipo de sensor, precisamos de um tipo diferente de pino.

Na parte inferior direita da placa Arduino, você verá seis pinos marcados como “Analog In”. Esses pinos especiais não apenas informam se há uma tensão aplicada a eles, mas também seu valor. Usando oanalogRead() função, podemos ler a tensão aplicada a um dos pinos.

Esta função retorna um número entre 0 e 1023, que representa tensões entre 0 e 5 volts. Por exemplo, se houver uma tensão de 2,5 V aplicada ao pino número 0, analogRead (0) retorna 512.

Sintaxe da função analogRead ()

analogRead(pin);
  • pin - o número do pino de entrada analógica para leitura (0 a 5 na maioria das placas, 0 a 7 no Mini e Nano, 0 a 15 no 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
}