全てのページ
GitBook提供
4 / 7

DIO 汎用ディジタルIO

汎用ディジタルIO(DIO)の操作には以下の関数を利用します。

  • pinMode()

  • digitalWrite()

  • digitalRead()

  • attachIntDio()

  • detachIntDio()

定数

ピン名と番号

定義

名称

const uint8_t PIN_DIGITAL::DIO0 .. 19

DIOピン0~19

const uint8_t PIN_DIGITAL::DO0 .. 1

DOピン0,1

ピンのモード(DIO0..19)

以下の列挙値は型名 E_PIN_MODEで取り扱われます。

定義

プルアップ

名称

PIN_MODE::INPUT

無

入力

PIN_MODE::OUTPUT

無

出力

PIN_MODE::INPUT_PULLUP

有

入力

PIN_MODE::OUTPUT_INIT_HIGH

無

出力(初期状態HIGH)

PIN_MODE::OUTPUT_INIT_LOW

無

出力(初期状態LOW)

PIN_MODE::WAKE_FALLING

無

入力、起床ピン、立下り

PIN_MODE::WAKE_RISING

無

入力、起床ピン、立上り

PIN_MODE::WAKE_FALLING_PULLUP

有

入力、起床ピン、立下り

PIN_MODE::WAKE_RISING_PULLUP

有

入力、起床ピン、立上り

PIN_MODE::DISABLE_OUTPUT

有

入力状態に戻す

ピンのモード(DO0,1)

以下の列挙値は型名 E_PIN_MODEで取り扱われます。

定義

名称

PIN_MODE::OUTPUT

出力

PIN_MODE::OUTPUT_INIT_HIGH

出力(初期状態HIGH)

PIN_MODE::OUTPUT_INIT_LOW

出力(初期状態LOW)

PIN_MODE::DISABLE_OUTPUT

出力設定をやめる

ピンの状態

以下の列挙値は型名 E_PIN_STATEで取り扱われます。

定義

値

名称

PIN_STATE::HIGH

1

HIGHレベル(=Vccレベル)

PIN_STATE::LOW

0

LOWレベル(=GNDレベル)

ピンの立ち上がり、立下り

以下の列挙値は型名 E_PIN_INT_MODEで取り扱われます。

定義

名称

PIN_INT_MODE::FALLING

立ち下り

PIN_INT_MODE::RISING

立ち上がり

pinMode()

DIO(汎用ディジタルIO)ピンの設定を行います。

void pinMode(uint8_t u8pin, E_PIN_MODE mode)

この関数では DIO0..19 と、DO0,1のピンの状態を変更できます。設定内容は E_PIN_MODE の列挙値のDIOの解説とDOの解説を参照してください。

DO0,1は特殊なピンで、原則として他の目的で利用されるものですが、出力としても設定可能です。ただしハード的な制約があるピンですので、利用には注意が必要です。

両方のピンは、電源投入時にHIGHレベルが担保される必要があります。不安定な電圧をとったりするような回路構成の場合、モジュールが起動しないなどの問題が出ます。

digitalWrite()

ディジタル出力ピンの設定を変更します。

static inline void digitalWrite(uint8_t u8pin, E_PIN_STATE ulVal)

事前にpinMode()にて設定対象のピンを出力用に設定しておきます。1番目のパラメータは、設定対象のピン番号を指定します。2番目のパラメータはHIGHかLOWのいずれかを指定します。

入力が E_PIN_STATE 型となっています。E_PIN_STATEからint型への変換演算子は定義していませんので、数値による直接の入力はできないようになっています。

digitalRead()

入力設定のポートの値を読み出す。

static inline E_PIN_STATE digitalRead(uint8_t u8pin)

事前に入力に設定したピンの入力値をLOWまたはHIGHで得ます。

E_PIN_STATE型からint型への変換演算子は定義していないため、数値型への直接的な代入はできません。

attachIntDio()

DIO割り込みを有効にします。

void attachIntDio(uint8_t u8pin, E_PIN_INT_MODE mode)

事前に入力設定したピンに対して、1番目のパラメータは割り込みを有効にしたいピン番号で、2番目は割り込み方向(立ち上がり、立ち下がり)を指定します。

割り込みハンドラ、イベントハンドラの記述はアプリケーションビヘイビアで行います。

例

DIO5のピンがHIGHからLOWに変化したときに割り込みが発生する設定を行う。

void setup() {
  the_twelite.app.use<myAppClass>();
  
  pinMode(PIN_DIGITAL::DIO5, PIN_MODE::INPUT_PULLUP);
  attachIntDio(PIN_DIGITAL::DIO5, PIN_INT_MODE::FALLING);
}

void loop() {
  ;
}

myAppClass.hpp

class myAppClass: public mwx::BrdPal, MWX_APPDEFS_CRTP(myAppClasslMot)
{

};

アプリケーションビヘイビアmyAppClassの基本定義。詳細は省略している。

myAppClass.cpp

/*****************************************************************/
// MUST DEFINE CLASS NAME HERE
#define __MWX_APP_CLASS_NAME myAppClass
#include "_mwx_cbs_cpphead.hpp"
/*****************************************************************/

MWX_DIO_INT(PIN_DIGITAL::DIO5, uint32_t arg, uint8_t& handled) {
  static uint8_t ct;
  digitalWrite(PIN_DIGITAL::DIO12, (++ct & 1) ? HIGH : LOW);
	handled = false; // if true, no further event.
}

MWX_DIO_EVENT(PIN_DIGITAL::DIO5, uint32_t arg) {
  Serial << '*';	
}

/*****************************************************************/
// common procedure (DO NOT REMOVE)
#include "_mwx_cbs_cpptail.cpp"
// MUST UNDEF CLASS NAME HERE
#undef __MWX_APP_CLASS_NAME
} // mwx
/*****************************************************************/

アプリケーションビヘイビアmyAppClassの割り込みハンドラの記述。DIO5の割り込み発生時にDIO12の出力設定を反転させ、割り込みハンドラが終了してから発生するイベントではシリアルポートSerialに*を表示する。

detachIntDio()

割り込みハンドラの登録を解除します。

void detachIntDio(uint8_t u8pin)

digitalReadBitmap()

mwxライブラリ 0.1.4 以降に収録

入力設定のポートの値を一括読み出しします。

uint32_t digitalReadBitmap()

LSB側から順にDIO0 ... DIO19 の順に値が格納されます。

HIGH側のピンには 1 が、LOW側のピンには 0 が設定されます。