Você está na página 1de 5

Referncia Arduino - pinMode(), digitalWrite() e delay()

Funo: pinMode()
Descrio
Configura a porta especificada para se comportar tanto como entrada ou sada. Veja
o post sobre portas digitais para maiores detalhes.
Sintaxe
pinMode(pin, mode)
Parmetros
pin: o nmero da porta que voc deseja configurar
mode: INPUT para entrada e OUTPUT para sada
Retorna
Nada
Nota
As portas analgicas podem ser usadas como portas digitais, referindo-as como A0,
A1 etc.
Funo: digitalWrite()
Descrio
Altera o estado da porta para alto (HIGH) ou baixo (LOW) de uma porta digital.
Se a porta foi configurada como sada (OUTPUT) pela funo pinMode(), sua
voltagem ser correspondente aos valores de 5V (ou 3.3V nas placas de 3.3V) para
alto (HIGH), e 0V (GND) para baixo (LOW).
Se a porta configurada como entrada (INPUT), escrever um valor alto (HIGH) com
o digitalWrite() habilitar o resistor de elevao (pullup) interno de 20K (veja a
postagem sobre portas digitais). Escrever um valor baixo (LOW) desabilitar o
resistor de elevao. Este resistor de elevao suficiente para acionar muito
fracamente um LED, portanto se o LED funcionar, mas dessa forma fraca, esta a
causa mais provvel. A soluo configurar a porta para sada (OUTPUT) atravs
da funo pinMode().
NOTA: A porta digital 13 mais difcil de se utilizar como uma porta de entrada
dentre as outras portas digitais, pois existe um LED ligado a ela, com um resistor
em srie, soldado na placa, na maioria das placas. Se voc habilitar seu resistor de
elevao, ela travar em uma tenso aproximada de 1,7V, ao invs dos esperados
5V, por causa do LED embutido na placa, e o resistor em srie sempre puxar o
nvel de tenso para baixo, resultando sempre em um estado baixo (LOW). Se voc
quiser usar a porta 13 como entrada digital, ligue um resistor de referncia
(pulldown) externo.

Sintaxe
digitalWrite(pin, value)
Parmetros
pin: o nmero da porta
value: HIGH para o estado alto ou LOW para o estado baixo
Retorna
nada
Configura a porta 13 para o estado alto (HIGH), pausa por um segundo e depois
configura a porta de volta para o estado baixo (LOW).
Nota
As portas analgicas podem ser usadas como portas digitais, referindo-as como A0,
A1 etc.
Funo: delay()
Descrio
Pausa o programa por um perodo de tempo (em milissegundos) especificado pelo
parmetro. (Existem 1000 milissegundos em um segundo.)
Sintaxe
delay(ms)
Parmetros
ms: quantidade de milissegundos a parar o programa (unsigned long)
Retorna
nada
Advertncia
Assim como fcil criar o efeito de piscar um LED com a funo delay(), e muitos
programas (sketches) utilizam pausas curtas para tarefas como garantir o
pressionamento de um boto, o uso da funo delay() tem significativos obstculos.
Nenhuma outra ao, como leitura de sensores, clculos matemticos, ou
manipulao de portas funciona durante a pausa pela funo delay(). Dessa forma,
esta pausa tem como efeito causar a inoperabilidade de todas as outras atividades.
Para abordagens alternativas no controle de tempo, considere o uso da funo
millis(). Programadores mais experientes evitam utilizar a funo delay() para
clculos de tempo maiores que 10 milissegundos, a no ser que o programa seja
realmente muito simples. Certas coisas, entretanto, continuam funcionando
enquanto a funo delay() est controlando o chip do ATMega, porque essa funo
no desabilita as interrupes. Comunicao serial que chega no pino RX gravada,
valores PWM (analogwrite) e o estado das portas so mantidos, assim como as

interrupes funcionam como esperado.

Exemplo
int ledPin = 13; // LED conectado na porta 13
void setup()
{
pinMode(ledPin, OUTPUT); // configura a porta como saida (OUTPUT)
}
void loop()
{
digitalWrite(ledPin, HIGH); // liga (HIGH) o LED
delay(1000); // espera um segundo
digitalWrite(ledPin, LOW); // desliga (LOW) o LED
delay(1000); // espera um segundo
}
Postado por Renato Aloi s 14:53 10 comentrios:
Marcadores: arduino, arduino referncia pinMode digitalWrite portas digitais digital pin
ATMega, duemilanove

quarta-feira, 19 de outubro de 2011

Referncia Arduino - Portas Digitais


As portas digitais podem ser configuradas tanto como entrada e sada. Este artigo
explica a funcionalidade das portas nesses modos. Enquanto o ttulo deste artigo se
refere a portas digitais, importante lembrar que uma vasta maioria das portas
analgicas do Arduino (ATMega) podem ser configuradas, e usadas, da mesma
maneira que as portas digitais.
Propriedades das Portas Configuradas como Entrada (INPUT)
Portas do Arduino (ATMega) so por padro consideradas como entradas, ento
estas no precisam explicitamente ser declaradas como entrada atravs da funo
pinMode(). Portas configuradas como entrada se encontram em um estado
conhecido por alta impedncia. Uma forma de explicar isso que portas de entrada
demandam muito pouco, ou quase nada, do circuito que esto amostrando,
equivalente a um resistor de 100 mega ohms em srie com a porta. Isto significa
que no necessria muita corrente para alternar as portas de entrada de um
estado para outro, e que estas podem se tornar muito teis para tarefas como:
implementar um sensor capacitivo, sensvel ao toque; efetuar a leitura de um LED
como se fosse um foto-diodo; ou ainda fazer a leitura de um sensor analgico com
um esquemaRCTime.
Isto significa tambm, entretanto, que as portas de entrada apresentaro
sensibilidade aleatria entre estados pelo simples fato de no ter nada conectado a
elas, ou mesmo por estarem conectadas a um fio solto, detectando rudo eltrico a
partir do ambiente, ou acoplamento capacitivo do estado das portas adjacentes.

Resistor de Elevao (Pullup)


Dessa forma se faz necessrio, muitas vezes, nortear uma porta de entrada para
um estado conhecido, quando nenhum sinal se faz presente. Isto pode ser feito
adicionando na entrada, um resistor de elevao (ligando no 5V), ou um resistor de
referncia (pulldown - ligado no terra). 10k ohms um valor comumente utilizado.
Existem tambm resistores de elevao convenientemente construdos
internamente no chip do ATMega, que podem ser acessados via programao. Estes
resistores de elevao embutidos podem ser acessados da seguinte maneira:
pinMode(pin, INPUT); // configura a porta como entrada
digitalWrite(pin, HIGH); // liga o resistor de elevao (pullup)
Note que estes resistores de elevao provm corrente suficiente para acender de
forma bem suave um LED conectado a porta configurada como entrada. Se os LED's
de um projeto estiverem acendendo dessa forma bem suave, provavelmente
exatamente isso que est acontecendo e o programador esqueceu de usar a funo
pinMode() para configurar as portas como sada (OUTPUT).
Repare tambm que os resistores de elevao so controlados pelos mesmos
registradores (endereos internos da memria do chip) que controlam se uma porta
est em um estado alto (HIGH) ou baixo (LOW). Consequentemente um pino que
configurado para ter um resistor de elevao ligado quando a porta uma entrada,
manter o estado alto mesmo quando a porta for alterada para sada, atravs da
funo pinMode(). Isso funciona de forma inversa tambm, e uma porta de sada
deixada em estado alto, ter os resistores de elevao automaticamente ligados se
for alterada para o modo de entrada pelo pinMode().
NOTA: A porta digital 13 mais difcil de se utilizar como uma porta de entrada
dentre as outras portas digitais, pois existe um LED ligado a ela, com um resistor
em srie, soldado na placa, na maioria das placas. Se voc habilitar seu resistor de
elevao, ela travar em uma tenso aproximada de 1,7V, ao invs dos esperados
5V, por causa do LED embutido na placa, e o resistor em srie sempre puxar o
nvel de tenso para baixo, resultando sempre em um estado baixo (LOW). Se voc
quiser usar a porta 13 como entrada digital, ligue um resistor de referncia
(pulldown) externo.
Propriedades das Portas Configuradas como Sada (OUTPUT)
Portas configuradas como sada atravs do pinMode() encontram-se em um estado
de baixa impedncia. Isso significa que elas podem fornecer uma quantidade
considervel de corrente para outros circuitos. As portas do ATMega podem
alimentar (fornecer corrente positiva) ou ancorar (fornecer corrente negativa) at
40mA (miliampres) de corrente para outros dispositivos/circuitos. Isso corrente
suficiente para acender bem forte um LED (no se esquea do resistor em srie),
ou acomodar vrios sensores, por exemplo; mas no fornece corrente suficiente
para ativar diretamente a maioria dos rels, solenides, ou motores.

Curto-circuitos nas portas do Arduino, ou tentativas de ativar dispositivos que


consomem altas correntes, podem danificar ou at destruir o transistor de sada da
porta; ou ainda danificar completamente o chip ATMega. Muitas vezes isso resulta
em um pino "morto" no microcontrolador, mas o resto do chip ainda funciona
adequadamente. Por essa razo, uma boa ideia conectar portas de sada aos
dispositivos, atravs de um resistor de 470 ou 1k ohms, a no ser que a mxima
corrente consumida das portas seja necessria para alguma aplicao em particular.

Você também pode gostar