最適な出力のために、Google Chrome(15以降)または Microsoft Edge(79以降)を推奨いたします。
2024-11-14 現在汎用デジタルIO
DIOポートを扱う関数
汎用デジタル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 | 立ち上がり |
1 - pinMode()
初期化関数
DIO(汎用デジタルIO)ピンの設定を行います。
void pinMode(uint8_t u8pin, E_PIN_MODE mode)
この関数では DIO0..19 と、DO0,1のピンの状態を変更できます。設定内容は E_PIN_MODE
の列挙値のDIOの解説とDOの解説を参照してください。
DO0,1は特殊なピンで、原則として他の目的で利用されるものですが、出力としても設定可能です。ただしハード的な制約があるピンですので、利用には注意が必要です。
両方のピンは、電源投入時にHIGHレベルが担保される必要があります。不安定な電圧をとったりするような回路構成の場合、モジュールが起動しないなどの問題が出ます。
2 - digitalWrite()
デジタル出力関数
デジタル出力ピンの設定を変更します。
static inline void digitalWrite(uint8_t u8pin, E_PIN_STATE ulVal)
事前にpinMode()
にて設定対象のピンを出力用に設定しておきます。1番目のパラメータは、設定対象のピン番号を指定します。2番目のパラメータはHIGH
かLOW
のいずれかを指定します。
入力が E_PIN_STATE
型となっています。E_PIN_STATE
からint
型への変換演算子は定義していませんので、数値による直接の入力はできないようになっています。
3 - digitalRead()
デジタル入力関数
入力設定のポートの値を読み出します。
static inline E_PIN_STATE digitalRead(uint8_t u8pin)
事前に入力に設定したピンの入力値をLOW
またはHIGH
で得ることができます。
E_PIN_STATE
型からint
型への変換演算子は定義していないため、数値型への直接的な代入はできません。
4 - attachIntDio()
DIO割り込みハンドラを登録する関数
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
に*
を表示します。
5 - detachIntDio()
DIO割り込みハンドラの登録を解除する関数
割り込みハンドラの登録を解除します。
void detachIntDio(uint8_t u8pin)
6 - digitalReadBitmap()
デジタル入力関数(一括)
入力設定のポートの値を一括で読み出します。
MWX ライブラリ 0.1.4 以降に収録しています。
uint32_t digitalReadBitmap()
LSB側から順にDIO0 … DIO19 の順に値が格納されます。
HIGH
側のピンには 1 が、LOW
側のピンには 0 が設定されます。