- 定数の定義(ピン番号など)
- ハードウェアの初期化
- センサー等の取り扱い
セクションの複数ページをまとめています。 印刷またはPDF形式で保存...
ボードビヘイビア (BRD)
- 1: <BRD_APPTWELITE>
- 2: <MONOSTICK>
- 3: PAL 共通定義
- 3.1: <PAL_AMB>
- 3.2: <PAL_MAG>
- 3.3: <PAL_MOT>
- 3.4: <PAL_NOTICE>
- 4: <CUE>
- 5: <ARIA>
1 - <BRD_APPTWELITE>
定数
以下の定数を定義しています。
static const uint8_t PIN_DI1 = mwx::PIN_DIGITAL::DIO12;
static const uint8_t PIN_DI2 = mwx::PIN_DIGITAL::DIO13;
static const uint8_t PIN_DI3 = mwx::PIN_DIGITAL::DIO11;
static const uint8_t PIN_DI4 = mwx::PIN_DIGITAL::DIO16;
static const uint8_t PIN_DO1 = mwx::PIN_DIGITAL::DIO18;
static const uint8_t PIN_DO2 = mwx::PIN_DIGITAL::DIO19;
static const uint8_t PIN_DO3 = mwx::PIN_DIGITAL::DIO4;
static const uint8_t PIN_DO4 = mwx::PIN_DIGITAL::DIO9;
static const uint8_t PIN_M1 = mwx::PIN_DIGITAL::DIO10;
static const uint8_t PIN_M2 = mwx::PIN_DIGITAL::DIO2;
static const uint8_t PIN_M3 = mwx::PIN_DIGITAL::DIO3;
static const uint8_t PIN_BPS = mwx::PIN_DIGITAL::DIO17;
static const uint8_t PIN_AI1 = mwx::PIN_ANALOGUE::A1;
static const uint8_t PIN_AI2 = mwx::PIN_ANALOGUE::A3;
static const uint8_t PIN_AI3 = mwx::PIN_ANALOGUE::A2;
static const uint8_t PIN_AI4 = mwx::PIN_ANALOGUE::A4;
BRD_APPTWELITE::PIN_DI1
のようにアクセスできます。
メソッド
DIP SW (M1 M2 M3 BPS) ピンの値を取得するためのメソッドが用意されています。
inline uint8_t get_M1()
inline uint8_t get_M2()
inline uint8_t get_M3()
inline uint8_t get_BPS()
inline uint8_t get_DIPSW_BM()
戻り値はHIGH, LOWではなく、0
がセットされていない(HIGH側)、1
がスイッチがセットされる(LOW側)という意味です。
get_DIPSW_BM()
は、bit0から順にM1,M2,M3,BPSピンの値を返します。
2 - <MONOSTICK>
定数
以下の定数を定義しています。
const uint8_t PIN_LED = mwx::PIN_DIGITAL::DIO16; // LED
const uint8_t PIN_WDT = mwx::PIN_DIGITAL::DIO9; // WDT (shall tick < 1sec)
const uint8_t PIN_WDT_EN = mwx::PIN_DIGITAL::DIO11; // WDT (LO as WDT enabled)
const uint8_t PIN_LED_YELLOW = mwx::PIN_DIGITAL::DO1; // YELLOW LED
MONOSTICK::PIN_LED
のようにアクセスできます。
ハードの初期化
pinMode(PIN_LED, OUTPUT_INIT_HIGH);
pinMode(PIN_WDT, OUTPUT_INIT_LOW);
pinMode(PIN_WDT_EN, OUTPUT_INIT_LOW);
pinMode(PIN_LED_YELLOW, OUTPUT);
上記のコードのように各ピンが初期化されます。
ウォッチドッグタイマー
起動時、スリープ起床時、起動後一定時間経過後に外部のウォッチドッグタイマーを再セットします。
ウォッチドッグタイマーのタイムアウトは1秒です。
MONOSTICKでは通常スリープするアプリケーションを実行しませんが、その場合はMONOSTICK::PIN_WDT_EN
をHIGHにしてからスリープします。
メソッド
set_led()
void set_led_red(uint8_t mode, uint16_t tick)
void set_led_yellow(uint8_t mode, uint16_t tick)
LED(赤、黄)の制御を行います。
黄色のLED(MONOSTICK::PIN_LED_YELLOW
)はSPIMISOピン(半導体のピン名DO1)です。本ボードビヘイビアではPWM制御による点灯用のメソッドや手続きは含まれません。必要に応じて以下の記述を行います。
set_led_yellow()
は呼び出さないようにして下さい。- 始動後にPWM出力の初期化を別途行います。SPIMISOピンはApp_Twelite標準アプリケーションではPWM3に対応し、Timer3クラスオブジェクトにより制御できます。
- スリープ復帰後にPWM出力の初期化を別途行います。その際、DO1の出力設定を解除します。
- PWM設定前にDO1の出力設定を解除してください。
pinMode(PIN_LED_YELLOW, DISABLE_OUTPUT);
MONOSTICK::PIN_LED_YELLOW
)は、スリープ中に点灯させることはできません。mode
は以下のパラメータを取ります。tick
は点灯時間[ms]を指定しますが、詳細はmode
の解説を参照してください。
指定 | 意味 |
---|---|
LED_TIMER::BLINK | LEDを点滅させます。tick に与える時間[ms]ごとにON/OFFが切り替わります。スリープ復帰後はカウントをリセットし点灯状態から始まります。 |
LED_TIMER::ON_RX | パケットの受信時にtick に与える時間[ms]だけ点灯します。 |
LED_TIMER::ON_TX_COMP | 送信完了時にtick に与える時間[ms]だけ点灯します。 |
3 - PAL 共通定義
定数
以下の定数を定義しています。
static const uint8_t PIN_BTN = 12; // button (as SET)
static const uint8_t PIN_LED = 5; // LED
static const uint8_t PIN_WDT = 13; // WDT (shall tick every 60sec)
static const uint8_t PIN_D1 = 1; // DIP SW1
static const uint8_t PIN_D2 = 2; // DIP SW2
static const uint8_t PIN_D3 = 3; // DIP SW3
static const uint8_t PIN_D4 = 4; // DIP SW4
static const uint8_t PIN_SNS_EN = 16;
static const uint8_t PIN_SNS_INT = 17;
PAL_AMB::PIN_BTN
のようにアクセスできます。
ハードの初期化
pinMode(PIN_BTN, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT_INIT_HIGH);
pinMode(PIN_WDT, OUTPUT_INIT_HIGH);
pinMode(PIN_D1, INPUT_PULLUP);
pinMode(PIN_D2, INPUT_PULLUP);
pinMode(PIN_D3, INPUT_PULLUP);
pinMode(PIN_D4, INPUT_PULLUP);
上記のコードのように各ピンが初期化されます。
ウォッチドッグタイマー
起動時、スリープ起床時、起動後一定時間経過後に外部のウォッチドッグタイマーを再セットします。
メソッド
set_led()
void set_led(uint8_t mode, uint16_t tick)
LED(D1)の制御を行います。
mode
は以下のパラメータを取ります。tick
は点灯時間[ms]を指定しますが、詳細はmode
の解説を参照してください。
指定 | 意味 |
---|---|
LED_TIMER::BLINK | LEDを点滅させます。tick に与える時間[ms]ごとにON/OFFが切り替わります。スリープ復帰後はカウントをリセットし点灯状態から始まります。 |
LED_TIMER::ON_RX | パケットの受信時にtick に与える時間[ms]だけ点灯します。 |
LED_TIMER::ON_TX_COMP | 送信完了時にtick に与える時間[ms]だけ点灯します。 |
led_one_shot()
void led_one_shot(uint16_t tick)
指定期間だけLEDを点灯します。set_led()
の機能と同時には使えません。
get_D1() .. D4(), get_DIPSW_BM()
inline uint8_t get_D1()
inline uint8_t get_D2()
inline uint8_t get_D3()
inline uint8_t get_D4()
inline uint8_t get_DIPSW_BM()
get_D1() .. get_D4()
はDIP SWがHIGH(スイッチが上)の時0
、LOW(スイッチが下)のとき1
を返します。
get_DIPSW_BM()
はDIP SWの設定値を0..15
で返します。SW1==LOW
を1
, SW2 == LOW
を2
, SW3 == LOW
を4
, SW4 == LOW
を8
とした和を返します。
D1..D4のHIGH(1),LOW(0)
の値とは反対になります。
DIP SWのLOW(0)
側がセットされた、つまり、1
の値を持つと意味付けしているためです。
3.1 - <PAL_AMB>
共通定義に加えボード上のセンサーを取り扱えるようになっています。
- 温湿度センサー SHTC3
- 照度センサー LTR308ALS
void setup() {
auto&& brd = the_twelite.board.use<PAL_AMB>();
}
メンバーオブジェクト
sns_SHTC3
SHTC3センサーのオブジェクトです。
sns_LTR308ALS
LTR-308ALSセンサーのオブジェクトです。
3.2 - <PAL_MAG>
void setup() {
auto&& brd = the_twelite.board.use<PAL_MAG>();
}
開閉センサーパルのセンサーは磁気センサーで、2本の信号線の割り込みの入力のみです。
const uint8_t PAL_MAG::PIN_SNS_NORTH = 16;
const uint8_t PAL_MAG::PIN_SNS_OUT1 = 16;
const uint8_t PAL_MAG::PIN_SNS_SOUTH = 17;
const uint8_t PAL_MAG::PIN_SNS_OUT2 = 17;
PAL_MAG::PIN_SNS_NORTHはセンサーがN極を検出したとき、PAL_MAG::PIN_SNS_SOUTHはセンサーがN極を検出したときに割り込みが入ります。
スリープ前に以下の設定をしておきます。
pinMode(PAL_MAG::PIN_SNS_OUT1, PIN_MODE::WAKE_FALLING);
pinMode(PAL_MAG::PIN_SNS_OUT2, PIN_MODE::WAKE_FALLING);
起床時に起床要因のIOを確認します。
uint8_t b_north =
the_twelite.is_wokeup_by_dio(PAL_MAG::PIN_SNS_NORTH);
uint8_t b_south =
the_twelite.is_wokeup_by_dio(PAL_MAG::PIN_SNS_SOUTH);
3.3 - <PAL_MOT>
共通定義に加えボード上のセンサーを取り扱えるようになっています。
- 加速度センサー MC3630
void setup() {
auto&& brd = the_twelite.board.use<PAL_MOT>();
}
メンバーオブジェクト
sns_MC3630
MC3630センサーのオブジェクトです。
3.4 - <PAL_NOTICE>
共通定義に加えボード上のセンサーを取り扱えるようになっています。
- LEDドライバ PCA9632
- 加速度センサー MC3630
void setup() {
auto&& brd = the_twelite.board.use<PAL_NOTICE>();
}
メンバーオブジェクト
sns_PCA9632
PCA9632デバイスのオブジェクトです。ボード定義ではWireの初期化、デバイスの初期化を実施します。原則として後述のPCA9632操作メソッドを用いて制御します。
コイン電池を利用する場合、周期的に一瞬光るといった動作を行えば大きな電流による影響を緩和できます。
例えば1秒おきに20ms程度光るような設定を行えば、視覚的に十分な明るさを維持でき、上記影響を緩和できるだけでなく、電池の消耗も小さくできます(連続で5mA程度流す照度設定を、1秒に20ms点灯する場合はLED消費の平均電流は0.1mA)。
sns_MC3630
MC3630センサーのオブジェクトです。ボード定義ではSPIの初期化、MC3630デバイスの初期化、MC3630の割り込み処理などを行っています。諸処理はsns_MC3630
定義の手続きを用います。
PCA9632 定義
static const uint8_t LED_OFF = SnsPCA9632::LED_OFF;
static const uint8_t LED_ON = SnsPCA9632::LED_PWM;
static const uint8_t LED_BLINK = SnsPCA9632::LED_BLINK;
static const uint8_t LED_NOP = SnsPCA9632::LED_NOP;
static const uint8_t LED_R = SnsPCA9632::LED1;
static const uint8_t LED_G = SnsPCA9632::LED2;
static const uint8_t LED_B = SnsPCA9632::LED3;
static const uint8_t LED_W = SnsPCA9632::LED4;
static const uint8_t LED_REG_MAX_PWM = 127;
static const uint8_t LED_REG_BOOST_PWM = 255;
点灯状態
定義 | 意味 |
---|---|
PAL_NOTICE::LED_OFF | 消灯 |
PAL_NOTICE::LED_ON | 点灯(PWM照度制御) |
PAL_NOTICE::LED_BLINK | 点滅 |
PAL_NOTICE::LED_NOP | 変更しない |
LED識別子
定義 | 意味 |
---|---|
PAL_NOTICE::LED_R | LED赤 |
PAL_NOTICE::LED_G | LED緑 |
PAL_NOTICE::LED_B | LED青 |
PAL_NOTICE::LED_W | LED白 |
レジスタ設定定義
定義 | 意味 |
---|---|
PAL_NOTICE::LED_REG_MAX_PWM | 標準照度のPMWレジスタ設定値(全灯の1/2を標準とする) |
PAL_NOTICE::LED_REG_BOOST_PWM | ブースト時のPWMレジスタ設定値 |
PCA9632 操作メソッド
マスタースイッチ
void set_led_master_sw_on() { digitalWrite(PIN_SNS_EN, LOW); }
void set_led_master_sw_off() { digitalWrite(PIN_SNS_EN, HIGH); }
NOTICE PAL では、PCA9632の出力後段にFETスイッチを設けています。このスイッチをONにしない限りLEDは点灯しません。
点灯状態変更
void set_led_r_blink()
void set_led_r_on()
void set_led_r_off()
void set_led_g_on()
void set_led_g_blink()
void set_led_g_off()
void set_led_b_on()
void set_led_b_blink()
void set_led_b_off()
void set_led_w_on()
void set_led_w_blink()
void set_led_w_off()
個別のLEDを消灯、点灯、点滅に設定します。
void set_leds(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
void set_leds_off()
set_leds()は全てのLEDの点灯状態を変更します。パラメータは点灯状態PAL_NOTICE::LED_OFF
PAL_NOTICE::LED_ON
PAL_NOTICE::LED_BLINK
PAL_NOTICE::LED_NOP
のいずれかを指定します。
点灯照度制御
void set_led_brightness_r_reg(uint8_t duty)
void set_led_brightness_g_reg(uint8_t duty)
void set_led_brightness_b_reg(uint8_t duty)
void set_led_brightness_w_reg(uint8_t duty)
void set_leds_brightness_reg(uint8_t r, uint8_t g, uint8_t b, uint8_t w)
void set_led_brightness_r1000(uint16_t duty, bool boost = false)
void set_led_brightness_g1000(uint16_t duty, bool boost = false)
void set_led_brightness_b1000(uint16_t duty, bool boost = false)
void set_led_brightness_w1000(uint16_t duty, bool boost = false)
void set_leds_brightness1000(
uint16_t r, uint16_t g, uint16_t b, uint16_t w, bool boost = false)
PWMのデューティ比(LEDの点灯明るさ)を指定します。
set_led_brightness_?_reg()
とset_leds_brightness_reg()
はレジスタ値を直接指定します。0..255を指定し点灯は比duty/256
となります。
set_led_brightness_?1000()
とset_leds_brightness1000()
は、デューティ比を0..1000で指定します。0は消灯相当で値が大きくなるほど明るく(点灯区間が長くなる)なります。boost
をfalse
にすると1000を指定したときのレジスタ値が127となります。true
では255となります。
点滅制御
void set_blink_cycle_ms(uint16_t x)
void set_blink_duty1000(uint16_t x)
PAL_NOTICE::LED_BLINK
を指定したLEDは、指定した周期・点灯期間比で点滅します。
- 個別に点滅パターンを指定することは出来ません。
- 上記の点灯照度設定で指定したPWMデューティ比で点灯するため、明るさの制御も可能です。
set_blink_cycle_ms()
はx
で指定した期間[ms]を周期として点滅します。
set_blink_duty1000()
はx
を0..1000で指定し周期*x/1000
を点灯期間として点滅します。
テスト点灯
void test_led()
ごく短い間4つのLEDを点灯します。点灯後はマスタースイッチがON(set_led_master_sw_on()
)になります。
4 - <CUE>
ボード上の加速度センサー、磁気センサー、LEDを取り扱えるようになっています。
- 加速度センサー
- 磁気センサー
- LED
void setup() {
auto&& brd = the_twelite.board.use<CUE>();
}
加速度センサー
MC3630センサーのメンバーオブジェクト (sns_MC3630
) が定義されています。
磁気センサー
開閉センサーパルのセンサーは磁気センサーで、2本の信号線の割り込みの入力のみです。
const uint8_t CUE::PIN_SNS_NORTH = 16;
const uint8_t CUE::PIN_SNS_OUT1 = 16;
const uint8_t CUE::PIN_SNS_SOUTH = 8;
const uint8_t CUE::PIN_SNS_OUT2 = 8;
CUE::PIN_SNS_NORTH
はセンサーがN極を検出したとき、CUE::PIN_SNS_SOUTH
はセンサーがN極を検出したときに割り込みが入ります。
スリープ前に以下の設定をしておきます。
pinMode(CUE::PIN_SNS_OUT1, PIN_MODE::WAKE_FALLING);
pinMode(CUE::PIN_SNS_OUT2, PIN_MODE::WAKE_FALLING);
起床時に起床要因のIOを確認します。
uint8_t b_north =
the_twelite.is_wokeup_by_dio(CUE::PIN_SNS_NORTH);
uint8_t b_south =
the_twelite.is_wokeup_by_dio(CUE::PIN_SNS_SOUTH);
LED
set_led()
void set_led(uint8_t mode, uint16_t tick)
LED(D1)の制御を行います。
mode
は以下のパラメータを取ります。tick
は点灯時間[ms]を指定しますが、詳細はmode
の解説を参照してください。
指定 | 意味 |
---|---|
LED_TIMER::BLINK | LEDを点滅させます。tick に与える時間[ms]ごとにON/OFFが切り替わります。スリープ復帰後はカウントをリセットし点灯状態から始まります。 |
LED_TIMER::ON_RX | パケットの受信時にtick に与える時間[ms]だけ点灯します。 |
LED_TIMER::ON_TX_COMP | 送信完了時にtick に与える時間[ms]だけ点灯します。 |
led_one_shot()
void led_one_shot(uint16_t tick)
指定期間だけLEDを点灯します。set_led()
の機能と同時には使えません。
ウォッチドッグタイマー
起動時、スリープ起床時、起動後一定時間経過後に外部のウォッチドッグタイマーを再セットします。
5 - <ARIA>
ボード上の加速度センサー、磁気センサー、LEDを取り扱えるようになっています。
- 温湿度センサー
- 磁気センサー
- LED
void setup() {
auto&& brd = the_twelite.board.use<ARIA>();
}
温湿度センサー
SHT4xセンサーのメンバーオブジェクト (sns_SHT4x
) が定義されています。
磁気センサー
開閉センサーパルのセンサーは磁気センサーで、2本の信号線の割り込みの入力のみです。
const uint8_t CUE::PIN_SNS_NORTH = 16;
const uint8_t CUE::PIN_SNS_OUT1 = 16;
const uint8_t CUE::PIN_SNS_SOUTH = 8;
const uint8_t CUE::PIN_SNS_OUT2 = 8;
ARIA::PIN_SNS_NORTH
はセンサーがN極を検出したとき、ARIA::PIN_SNS_SOUTH
はセンサーがN極を検出したときに割り込みが入ります。
スリープ前に以下の設定をしておきます。
pinMode(CUE::PIN_SNS_OUT1, PIN_MODE::WAKE_FALLING);
pinMode(CUE::PIN_SNS_OUT2, PIN_MODE::WAKE_FALLING);
起床時に起床要因のIOを確認します。
uint8_t b_north =
the_twelite.is_wokeup_by_dio(CUE::PIN_SNS_NORTH);
uint8_t b_south =
the_twelite.is_wokeup_by_dio(CUE::PIN_SNS_SOUTH);
LED
set_led()
void set_led(uint8_t mode, uint16_t tick)
LED(D1)の制御を行います。
mode
は以下のパラメータを取ります。tick
は点灯時間[ms]を指定しますが、詳細はmode
の解説を参照してください。
指定 | 意味 |
---|---|
LED_TIMER::BLINK | LEDを点滅させます。tick に与える時間[ms]ごとにON/OFFが切り替わります。スリープ復帰後はカウントをリセットし点灯状態から始まります。 |
LED_TIMER::ON_RX | パケットの受信時にtick に与える時間[ms]だけ点灯します。 |
LED_TIMER::ON_TX_COMP | 送信完了時にtick に与える時間[ms]だけ点灯します。 |
led_one_shot()
void led_one_shot(uint16_t tick)
指定期間だけLEDを点灯します。set_led()
の機能と同時には使えません。
ウォッチドッグタイマー
起動時、スリープ起床時、起動後一定時間経過後に外部のウォッチドッグタイマーを再セットします。