Effiziente 8-Bit-I/O-Port-Bibliothek für Arduino – Digitale Steuerung erweitern
Benötigte Komponenten
| Komponente | Menge |
|---|---|
| Arduino UNO | 1 |
| 5 mm LED rot | 8 (für Demos) |
| 10 kΩ Potentiometer (Einmal-Drehung) | 1 |
Über dieses Projekt
Die Standardfunktionen digitalWrite() und digitalRead() arbeiten immer nur auf einem Pin. Will man aber 8-Bit-Geräte ansteuern (7-Segment-Anzeigen, DIP-Schalter, DACs), muss man 8 Pins einzeln setzen – mühsam und langsam.
Diese Bibliothek fasst beliebige 8 Arduino-Pins zu einem virtuellen 8-Bit-Port zusammen. Ein Funktionsaufruf genügt, um ein ganzes Byte (0–255) auszugeben oder einzulesen.
Bibliotheks-Funktionen
- IO_Port_8bit(p1..p8, dir) – Konstruktor mit fester Richtung (
'O'=Output,'I'=Input) - IO_Port_8bit(p1..p8) – Konstruktor ohne Richtung (später per
set_IO_direction()änderbar) - set_IO_direction(dir) – Richtung zur Laufzeit setzen (
'I'oder'O') - send_8bit_data(byte) – 8-Bit-Wert (0–255) an die 8 Pins ausgeben
- get_8bit_data() – 8-Bit-Wert von den 8 Pins einlesen (Rückgabe: int 0–255)
Beispiele
1. 8 LEDs abwechselnd blinken lassen (1 Hz)
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2,3,4,5,6,7,8,9, 'O'); // Output-Port
void setup() {}
void loop() {
myport.send_8bit_data(85); // 01010101 – ungerade LEDs an
delay(500);
myport.send_8bit_data(170); // 10101010 – gerade LEDs an
delay(500);
}
2. Binärcount 0–15 auf LEDs darstellen
#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. Analogen Spannungspegel als 8-LED-Balkengrafik anzeigen
#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-Bit-Eingang von DIP-Schaltern lesen & seriell ausgeben
#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 = myport.get_8bit_data();
Serial.print("Eingang = ");
Serial.println(input);
delay(1000);
}
Schaltplan
Die 8 gewählten Pins werden über Vorwiderstände (bei LEDs) oder Pull-Up/Pull-Down (bei Schaltern) mit den externen Bauelementen verbunden. Die Bibliothek kümmert sich um das Bit-Mapping.
Hinweis
Der Library-Code selbst ist als Download verfügbar (Arduino Library for 8-bit IO Port). Einbinden über Sketch → Bibliothek einbinden → .ZIP-Bibliothek hinzufügen.
Herstellungsprozess
- Arduino Nano Flight Simulator 2020 Kontrollpanel – LCD & CDI Display
- Arduino-basiertes Schalter- & LED-Panel für Microsoft Flight Simulator 2020
- Smartes Temperatur-Monitoring für Schulen – Arduino, Raspberry Pi, Sigfox & ThingSpeak
- Arduino 64-Tasten-Prototyp-Keyboard-Matrix – Eigenes Keyboard mit Schieberegistern bauen
- Arduino-Sicherheitszone: Geräte (Android, iOS, Windows 10) per Fingerprint entsperren
- 2,8″ TFT-Shield für Arduino Nano – 320×240 SPI-Display mit Touch
- DIY Arduino Kakerlaken-Steuerung – Bauen für unter 30 €
- Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
- Günstiger Arduino-Atemcontroller mit USB-MIDI-Integration
- Smartes Indoor-Navigations-Roboter-Kit für Arduino-Projekte