Arduino用8ビットI/Oポートライブラリ:デジタル制御を拡張
必要な部品と材料
| 部品 | 詳細 | 数量 |
|---|---|---|
| Arduino UNO | 1 | |
| 5mm赤色LED | 1 | |
| 単回転ポテンショメータ 10kΩ | 1 |
使用ツール・サービス
- Arduino IDE
このプロジェクトについて
Arduino用8ビットI/Oポートライブラリ
Arduino標準の digitalWrite() と digitalRead() は1ピンずつしか扱えません。7セグメント表示器、DIPスイッチ、DAC(D/Aコンバータ)など8ビット並列デバイスを接続する場合、8個のピンにビットパターン(例:0x37 → 00110111)を個別に書き込む必要があり、煩雑です。
このライブラリは任意の8ピンをひとまとめの8ビットポートとして扱えるようにします。入力・出力方向はコンストラクタまたは専用関数で 'O'(出力) / 'I'(入力) を指定。全5関数のみのシンプルな設計です。
関数一覧
IO_Port_8bit(pin1...pin8, dir)— 8ピンと方向('O'/'I')を指定してポートオブジェクト生成。方向は固定。IO_Port_8bit(pin1...pin8)— 方向指定なしで生成。後からset_IO_direction()で変更可能(入出力切替可)。set_IO_direction(char dir)— 'I'で入力、'O'で出力に設定。未指定時はシリアルモニタにエラー表示。send_8bit_data(int byt)— 8ビットデータ(0〜255)を一括出力。255超えはエラー。get_8bit_data()— 8ピンの状態を読み取り、8ビット整数として返す。
使用例
例1:8個のLEDを1Hzで交互点滅
#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 奇数番点灯
delay(500);
myport.send_8bit_data(170); // 0b10101010 偶数番点灯
delay(500);
}
例2:LEDでバイナリカウント(0〜F)表示
#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段LEDバーグラフで表示
#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:DIPスイッチから8ビット入力を取得しシリアル表示
#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);
}
コード
ライブラリ本体はダウンロードのみ提供されています(プレビュー不可)。
回路図
8ピンから直接8ビットデータを入出力する接続例を示します。
製造プロセス
- Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
- Microsoft Flight Simulator 2020用Arduinoスイッチ&LEDパネル
- 学校向けスマート体温監視システム: 正確、リアルタイム、安全
- Arduino 64キー プロトタイピング キーボードマトリックス: シフトレジスタで自作キーボード
- 指紋認証でAndroid/iOS/Windows 10を自動ロック解除する「セーフゾーン」デバイスの製作
- Arduino Nano用 高性能2.8インチTFTシールド - 320×240 SPIディスプレイ
- Arduinoでゴキブリ制御システムを自作 - 30ドル以下で構築
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- 安価なArduinoブレスコントローラー自作 - USB-MIDI対応でDAW直結
- DCモーター制御の極意:PID制御とPWM出力による速度・方向制御のエキスパートガイド
- Arduino向けスマート屋内ナビゲーションロボットキット