FASTIOライブラリ(3)

このページをスマートフォンなどでご覧になる場合は、画面を横長にする方が読みやすくなる事があります。
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) 次のページへ
2019年08月07日 公開。

5-2.記述が柔軟

FASTIOライブラリを使うと、I/Oピンにアクセスするための記述が柔軟になり、スケッチの保守性が向上します。

リスト5は、Arduinoの13番ピンをHIGHにするという内容を、FASTIOライブラリを使って記述する方法を説明するスケッチです。

リスト5、13番ピンをHIGHにするための記述COPY
// FASTIOライブラリを使って13番ピンにHIGHを出力する方法

#include <fastio.h> // FASTIOライブラリのヘッダファイルをインクルード

fastIoPin<13> LedPin; // 13番ピンにLedPinと命名した。13という数字でピンにアクセスするより、LedPinという名前でアクセスする方が可読性が上がる。

void setup() 
{
  pinMode(13,OUTPUT); // 13番ピンを出力モードに設定。
} // setup

void loop() 
{
  digitalWrite(13,HIGH); // 標準のArduinoのdigitalWrite関数による方法。
  digitalWrite<13>(HIGH); // FASTIOライブラリを使う方法その1。Arduino標準の方法に記述が似ているので、移植性が良い。
  LedPin.digitalWrite(HIGH); // FASTIOライブラリを使う方法その2。ピン番号を使わずに、名前を使ってI/Oピンにアクセスしているので、可読性が上がった。
  LedPin=HIGH; // FASTIOライブラリを使う方法その3。省略記法。出力したい値を代入すると、I/Oピンにその値を出力する。省略記法を使うと、記述量が減る。
} // loop

このリストに示す様に、同じ事をするにもいくつかの記述法を用意しており、目的に応じて使い分けできます。

後述する様に、FASTIOライブラリは、ArduinoのI/Oピンにアクセスするだけでなく、シリアル-パラレル変換用のシフトレジスタICである74HC595を使って、出力ピンを拡張したり、パラレル-シリアル変換用のシフトレジスタICである74HC165を使って、入力ピンを拡張した場合に対応していますが、Arduino上のI/Oピンにアクセスするのと似た記述で、74HC595や74HC165上のピンにアクセスできます。

リスト6は、Arduinoに接続した74HC595の出力ピンに出力する方法を説明したスケッチです。

リスト6、Arduinoに接続した74HC595の出力ピンに出力する方法を示すスケッチCOPY
// 74H595上の出力ピンに出力する方法

#include <fastio.h> // FASTIOライブラリのヘッダファイルをインクルード

hc595<3,4,5> my595; // SERピンとArdunoの3番ピンを結線し、SRCLKピンとArduinoの4番ピンを結線し、
                    // RCLKピンとArduinoの5番ピンを接続した74HC595に、my595という名前を付ける。

void setup() 
{
  pinMode(5,OUTPUT); // Arduinoの5番ピンを出力モードに設定。(74HC595には関係のない記述)
  my595.init(); // 74HC595とそのドライバの初期化
} // setup

void loop() 
{
  digitalWrite<5>(HIGH); // Arduinoの5番ピンにHIGHを出力。
  my595.digitalWrite<5>(HIGH); // 74HC595のbit 5にHIGHを出力
} // loop

若干の初期化処理を除くと、digitalWrite関数の前にmy595.を付けるだけでArduinoのI/Oピンへのアクセスから、74HC595の出力ピンのアクセスのコードに書き換えられる事が分かります。

何かを組み立てている内に、ArduinoのI/Oピンが足らなくなる事は、よくある事です。こういう場合に、FASTIOライブラリを使って開発していれば、少ない時間で、一部のI/Oピンを、Arduino上から74HC595上や74HC164上に移動できます。

広告

5-3.74HC595による出力ピンの拡張に対応

FASTIOライブラリは、シリアル-パラレル変換用のシフトレジスタICである、74HC595を用いて、出力ピンを拡張する事に対応しています。

74HC595との結線に必要なArduinoのI/Oピンは3本です。それに対し増える出力ピンは、74HC595が1個あたり8ピンです。論理的には最大32個の74HC595をカスケード接続できますから、32×8=256ピンの出力ピンが使える事になります。

カスケード接続した4個の74HC595をFASTIOライブラリで制御する方法を示したのが、リスト7に示すスケッチです。

リスト7、カスケード接続した4個の74HC595を制御するデモスケッチCOPY
// カスケード接続した4個の74HC595を制御するデモスケッチ

#include <fastio.h> // FASTIOライブラリのヘッダファイルをインクルード

hc595<3,4,5,4,LSBFIRST,LOWBYTEFIRST> my595; 
// カスケード接続した4個の74HC595からなるシフトレジスタに、my595という名前をつける。
// 1番目のパラメータは、初段の74HC595のSERピンと接続するArduinoのピンの番号。
// 2番目のパラメータは、全ての74HC595のSRCLKピンと接続するArduinoのピンの番号。
// 3番目のパラメータは、全ての74HC595のRCLKピンと接続するArduinoのピン番号。
// 4番目のパラメータは、カスケード接続する74HC595の個数。
// 5番目のパラメータは、1バイト内のLSBから送出するか、MSBから送出するかの区別。
// 6番目のパラメータは、低位バイトから送出するか、高位バイトから送出するかの区別。

hc595pin<decltype(my595), my595, 30> LedPin; // 4つの74HC595からなる32ビットのシフトレジスタのbit 30にLedPinという名前を付ける。

void setup() 
{
  my595.init(); // 74HC595とそのドライバの初期化
} // setup

void loop() 
{
  my595.shiftOut(0x12345678); // 最も単純な出力方法。全32ビットの情報を一挙に74HC595に送る。
  my595=0x12345678; // 前の行の省略記法。代入した32ビットの値を出力する。
  my595.digitalWrite<15>(HIGH); // bit 15をHIGHにし、他のビットの内容は変えない。(状態が変わるのは1つのピンだけが、32ビットの情報が転送される)
  LedPin.digitalWrite(HIGH); // bit 30をHIGHにし、他のビットは変えない。
  LedPin=HIGH; // 上の行の省略記法。LOW(0)を代入すると0を出力し、HIGHを代入すると1を出力する。
} // loop

5-4.74HC165による入力ピンの拡張に対応

FASTIOライブラリは、パラレル-シリアル変換用のシフトレジスタICである、74HC165を用いて、入力ピンを拡張する事に対応しています。

74HC165との結線に必要なArduinoのI/Oピンは3本です。それに対し増える出力ピンは、74HC165が1個あたり8ピンです。論理的には最大32個の74HC165をカスケード接続できますから、32×8=256ピンの入力ピンが使える事になります。

カスケード接続した4個の74HC165をFASTIOライブラリで制御する方法を示したのが、リスト8に示すスケッチです。

リスト8、カスケード接続した4個の74HC165を制御するデモスケッチCOPY
// カスケード接続した4個の74HC165を制御するデモスケッチ

#include <fastio.h> // FASTIOライブラリのヘッダファイルをインクルード

hc165<6,7,8,4,LSBFIRST,LOWBYTEFIRST> my165; 
// カスケード接続した4個の74HC165からなるシフトレジスタに、my165という名前をつける。
// 1番目のパラメータは、終段の74HC165のQHピンと接続するArduinoのピンの番号。
// 2番目のパラメータは、全ての74HC165のCLKピンと接続するArduinoのピンの番号。
// 3番目のパラメータは、全ての74HC165のSH//LDピンと接続するArduinoのピン番号。
// 4番目のパラメータは、カスケード接続する74HC595の個数。
// 5番目のパラメータは、1バイト内のLSBから受信するか、MSBから受信するかの区別。
// 6番目のパラメータは、低位バイトから受信するか、高位バイトから受信するかの区別。

hc165pin<decltype(my165), my165, 30> ButtonPin; // 4つの74HC165からなる32ビットのシフトレジスタのbit 30にButtonPinという名前を付ける。

void setup() 
{
  my165.init(); // 74HC595とそのドライバの初期化
} // setup

void loop() 
{
  uint32_t word_data; // シフトレジスタの全ピンの32ビット分の情報を保存する変数
  uint8_t bit_data; // シフトレジスタの特定のビットの情報を保存する変数。
  
  word_data=my165.shiftIn(); // 最も単純な出力方法。全32ビットの情報を一挙に74HC165から読み取る。
  word_data=my165; // 上の行の省略記法。
  bit_data=my165.digitalRead<15>(); // シフトレジスタからbit 15のみを読み込む。(読むのは1ビットだが、32ビットの情報転送を行う)
  bit_data=ButtonPin.digitalRead(); // bit 30のみを読み込む。
  bit_data=ButtonPin; // 上の行の省略記法。LOW(0)またはHIGH(1)が返る。
} // loop

次のページでは、FASTIOライブラリのインストール方法とアンインストール方法について説明します。

目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) 次のページへ

このページで使われている用語の解説

関連ページ

PCBgogoのバナー
Arduino 電子工作
このサイトの記事が本になりました
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
電子工作で学ぶ論理回路入門
このサイトの中の人が書いた本です。
ISBN:978-4-7775-2280-4
工学社の書籍の内容の紹介ページ
この本の紹介記事
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。