Библиотека 8-битного порта ввода-вывода для Arduino — расширение цифрового управления
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO | 1 |
| Светодиод 5 мм (красный) | 1 |
| Потенциометр 10 кОм (однооборотный) | 1 |
Программное обеспечение
- Arduino IDE
О проекте
Стандартные функции digitalWrite() и digitalRead() работают только с одним выводом за раз. Если нужно подключить 8-битное устройство (7-сегментный индикатор, DIP-переключатели, ЦАП), приходится управлять 8 выводами по отдельности, отправляя биты по одному.
Эта библиотека объединяет любые 8 выводов Arduino в один 8-битный порт ввода-вывода. Можно отправлять или считывать целый байт за одну операцию.
Функции библиотеки
- IO_Port_8bit(pin1...pin8, dir) — конструктор. Создает порт из 8 указанных выводов. Параметр
dir:'O'— выход,'I'— вход. Порт не может работать и на входе, и на выходе одновременно. - IO_Port_8bit(pin1...pin8) — конструктор без направления. Направление задается позже функцией
set_IO_direction(). Позволяет менять направление в runtime. - set_IO_direction(dir) — устанавливает направление:
'I'или'O'. При ошибке выводит сообщение в Serial Monitor. - send_8bit_data(byte) — отправляет 8-битное значение (0–255) на настроенные выводы. При значении >255 — ошибка в Serial.
- get_8bit_data() — считывает 8 бит с настроенных входов и возвращает целое число (0–255).
Примеры использования
Пример 1: Мигание 8 светодиодов по очереди (1 Гц)
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O'); // выходной порт
void setup() {}
void loop() {
myport.send_8bit_data(85); // 0b01010101 — нечетные LED
delay(500);
myport.send_8bit_data(170); // 0b10101010 — четные LED
delay(500);
}
Пример 2: Бинарный счетчик на 8 светодиодах (0–15)
#include <IO_Port_8bit.h>
IO_Port_8bit my8bitport(2, 3, 4, 5, 6, 7, 8, 9);
void setup() {
my8bitport.set_IO_direction('O');
}
void loop() {
for (int i = 0; i < 16; i++) {
my8bitport.send_8bit_data(i);
delay(200);
}
}
Пример 3: Индикация уровня аналогового сигнала на 8-сегментной шкале
#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); delay(500);
myport.send_8bit_data(0);
}
void loop() {
int level = analogRead(A0);
level = map(level, 0, 1023, 0, 80);
if (level > 70) myport.send_8bit_data(255);
else if (level > 60) myport.send_8bit_data(127);
else if (level > 50) myport.send_8bit_data(63);
else if (level > 40) myport.send_8bit_data(31);
else if (level > 30) myport.send_8bit_data(15);
else if (level > 20) myport.send_8bit_data(7);
else if (level > 10) myport.send_8bit_data(3);
else if (level > 0) myport.send_8bit_data(1);
else myport.send_8bit_data(0);
}
Пример 4: Чтение 8-битного ввода от DIP-переключателей
#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("8-bit input port test");
}
void loop() {
int input_byt = myport.get_8bit_data();
Serial.print("received input = ");
Serial.println(input_byt);
delay(1000);
}
Схема подключения
Библиотека доступна для скачивания в разделе Code оригинальной статьи.
Производственный процесс
- Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
- Панель переключателей и LED для Microsoft Flight Simulator 2020 на Arduino
- Умная система мониторинга температуры для школ: точно, в реальном времени, безопасно
- Arduino 64-клавишная прототипная клавиатура: матрица на сдвиговых регистрах
- Умная зона безопасности на Arduino: разблокировка Android, iOS и Windows 10 по отпечатку пальца
- TFT Shield 2.8" 320×240 SPI для Arduino Nano — высокопроизводительный дисплей
- DIY-система управления тараканом на Arduino — сборка за $30
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
- Доступный дыхание-контроллер (Breath Controller) на Arduino с USB-MIDI
- Набор для создания робота с умной внутренней навигацией на базе Arduino