汎用ディジタル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
以下の列挙値は型名 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
有
入力状態に戻す
以下の列挙値は型名 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
立ち上がり
DIO(汎用ディジタルIO)ピンの設定を行います。
void pinMode(uint8_t u8pin, E_PIN_MODE mode)
この関数では DIO0..19 と、DO0,1のピンの状態を変更できます。設定内容は E_PIN_MODE
の列挙値のDIOの解説とDOの解説を参照してください。
DO0,1は特殊なピンで、原則として他の目的で利用されるものですが、出力としても設定可能です。ただしハード的な制約があるピンですので、利用には注意が必要です。
両方のピンは、電源投入時にHIGHレベルが担保される必要があります。不安定な電圧をとったりするような回路構成の場合、モジュールが起動しないなどの問題が出ます。
ディジタル出力ピンの設定を変更します。
static inline void digitalWrite(uint8_t u8pin, E_PIN_STATE ulVal)
事前にpinMode()
にて設定対象のピンを出力用に設定しておきます。1番目のパラメータは、設定対象のピン番号を指定します。2番目のパラメータはHIGH
かLOW
のいずれかを指定します。
入力設定のポートの値を読み出す。
static inline E_PIN_STATE digitalRead(uint8_t u8pin)
事前に入力に設定したピンの入力値をLOW
またはHIGH
で得ます。
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() {
;
}
class myAppClass: public mwx::BrdPal, MWX_APPDEFS_CRTP(myAppClasslMot)
{
};
アプリケーションビヘイビアmyAppClass
の基本定義。詳細は省略している。
/*****************************************************************/
// 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
に*
を表示する。
割り込みハンドラの登録を解除します。
void detachIntDio(uint8_t u8pin)
mwxライブラリ 0.1.4 以降に収録
入力設定のポートの値を一括読み出しします。
uint32_t digitalReadBitmap()
LSB側から順にDIO0 ... DIO19 の順に値が格納されます。
HIGH側のピンには 1 が、LOW側のピンには 0 が設定されます。