Biblioteca Eficiente de Porta IO de 8 Bits para Arduino – Expanda o Controle Digital
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
| LED 5mm Vermelho | 1 |
| Potenciômetro Monovoltas 10k ohms | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Biblioteca Arduino para porta IO de 8 bits
Sabemos que o Arduino fornece saída digital usando digitalWrite() e lê entrada digital com digitalRead(). Porém, essas funções operam em um único pino por vez. Se você quiser interligar dispositivos de 8 bits como display de 7 segmentos, chaves DIP ou DAC (Conversor Digital-Analógico), não pode enviar 8 bits diretamente; precisa manipular 8 pinos individuais.
Para resolver isso, apresento a biblioteca 8-bit IO Port. Com ela, você pode enviar dados de 8 bits diretamente para quaisquer pinos do Arduino configurados como uma porta combinada de 8 bits, ou ler 8 bits desses pinos. A biblioteca agrupa quaisquer 8 pinos do Arduino para funcionarem como uma porta de entrada/saída de 8 bits. Basta selecionar 8 pinos e configurar sua direção de dados como entrada ('I') ou saída ('O').
A biblioteca possui apenas 5 funções: dois construtores para criar objeto(s) de porta, uma função para enviar saída digital de 8 bits, uma para ler entrada digital de 8 bits e uma para alterar/definir a direção de IO da porta.
Funções da Biblioteca
-
IO_Port_8bit(int pin1, pin2, pin3, pin4, pin5, pin6, pin7, pin8, char dir)
Construtor. Cria objeto(s) da classe, combinando 8 pinos distintos do Arduino como uma porta. O último argumentodirdefine a direção: 'O' para saída, 'I' para entrada. A mesma porta não pode funcionar como entrada e saída simultaneamente. Indica erro se a direção não for selecionada. -
IO_Port_8bit(int pin1, pin2, pin3, pin4, pin5, pin6, pin7, pin8)
Construtor alternativo. Cria a porta sem definir direção. Use a funçãoset_IO_directionpara definir direção em tempo de execução. Permite alternar a porta entre entrada e saída (não simultaneamente). -
set_IO_direction(char dir)
Define direção de entrada/saída da porta. Argumento: 'I' para entrada, 'O' para saída. Exibe erro no monitor serial se direção não selecionada. -
send_8bit_data(int byt)
Envia dado de 8 bits aos pinos especificados. Argumento: inteiro (< 255). Exibe erro se > 255. -
get_8bit_data(void)
Lê dado de 8 bits dos pinos especificados. Retorna inteiro de 8 bits lendo o estado dos 8 pinos.
Exemplos
Exemplo 1: Piscar 8 LEDs alternadamente a 1 Hz
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O'); // porta de saída
void setup() {}
void loop() {
myport.send_8bit_data(85); // pisca LEDs ímpares (01010101)
delay(500);
myport.send_8bit_data(170); // pisca LEDs pares (10101010)
delay(500);
}
Exemplo 2: Exibir contagem binária nos LEDs de 0 a F
#include <IO_Port_8bit.h>
IO_Port_8bit my8bitport(2, 3, 4, 5, 6, 7, 8, 9); // cria objeto
void setup() {
my8bitport.set_IO_direction('O'); // define direção
}
void loop() {
for (int i = 0; i < 16; i++) {
my8bitport.send_8bit_data(i);
delay(200);
}
}
Exemplo 3: Indicar nível de tensão analógica em display de barras de 8 LEDs
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O');
void setup() {
myport.send_8bit_data(255); // pisca todos
delay(500);
myport.send_8bit_data(0);
}
void loop() {
int level = analogRead(A0);
level = map(level, 0, 1023, 0, 80);
if (level < 80 && level > 70) myport.send_8bit_data(255);
else if (level <= 70 && level > 60) myport.send_8bit_data(127);
else if (level <= 60 && level > 50) myport.send_8bit_data(63);
else if (level <= 50 && level > 40) myport.send_8bit_data(31);
else if (level <= 40 && level > 30) myport.send_8bit_data(15);
else if (level <= 30 && level > 20) myport.send_8bit_data(7);
else if (level <= 20 && level > 10) myport.send_8bit_data(3);
else if (level <= 10 && level > 0) myport.send_8bit_data(1);
else if (level == 0) myport.send_8bit_data(0);
}
Exemplo 4: Ler entrada digital de 8 bits de chaves DIP e exibir no monitor serial
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9);
void setup() {
Serial.begin(9600);
myport.set_IO_direction('I');
Serial.println("Teste porta de entrada 8-bit");
}
void loop() {
int input_byt = myport.get_8bit_data();
Serial.print("entrada recebida = ");
Serial.println(input_byt);
delay(1000);
}
Código da Biblioteca
A biblioteca cria porta IO de 8 bits a partir de pinos do Arduino e envia/recebe dados digitais de 8 bits. Disponível apenas para download.
Esquemático
Porta IO envia ou recebe dados de 8 bits diretamente de diferentes pinos.

Processo de manufatura
- Painel de Controle para Flight Simulator 2020 com Arduino Nano – Display LCD e CDI
- Painel de Chaves e LEDs para Microsoft Flight Simulator 2020 com Arduino
- Sistema Inteligente de Monitoramento de Temperatura para Escolas: Preciso, Tempo Real e Seguro
- Teclado Prototípico de 64 Teclas com Arduino: Matriz com Registradores de Deslocamento
- Crie uma Zona Segura com Arduino para Desbloquear Dispositivos Android, iOS e Windows 10
- Shield TFT 2,8" para Arduino Nano – Display SPI 320×240 de Alto Desempenho
- Sistema DIY de Controle de Baratas com Arduino – Construa por Menos de $30
- Circuito de Entrada Analógica Isolada para Arduino
- Controlador de Respiração Arduino Acessível com Integração USB-MIDI
- Kit de Robô de Navegação Interna Inteligente para Projetos Arduino