セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-09-06 現在

PAL 共通定義

TWELITE PAL シリーズ向けの共通定義
TWELITE 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::BLINKLEDを点滅させます。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==LOW1, SW2 == LOW2, SW3 == LOW4, SW4 == LOW8とした和を返します。

1 - <PAL_AMB>

環境センサーパル用
環境センサーパル AMBIENT SENSE PAL のボードビヘイビアです。

共通定義に加えボード上のセンサーを取り扱えるようになっています。

  • 温湿度センサー SHTC3
  • 照度センサー LTR308ALS
void setup() {
  auto&& brd = the_twelite.board.use<PAL_AMB>();
}

メンバーオブジェクト

sns_SHTC3

SHTC3センサーのオブジェクトです。

sns_LTR308ALS

LTR-308ALSセンサーのオブジェクトです。

2 - <PAL_MAG>

開閉センサーパル用
開閉センサーパル OPEN-CLOSE SENSE PAL のボードビヘイビアです。
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 - <PAL_MOT>

動作センサーパル用
動作センサーパル MOTION SENSE PAL のボードビヘイビアです。

共通定義に加えボード上のセンサーを取り扱えるようになっています。

  • 加速度センサー MC3630
void setup() {
  auto&& brd = the_twelite.board.use<PAL_MOT>();
}

メンバーオブジェクト

sns_MC3630

MC3630センサーのオブジェクトです。

4 - <PAL_NOTICE>

通知パル用
通知パル NOTICE PAL のボードビヘイビアです。

共通定義に加えボード上のセンサーを取り扱えるようになっています。

  • LEDドライバ PCA9632
  • 加速度センサー MC3630
void setup() {
  auto&& brd = the_twelite.board.use<PAL_NOTICE>();
}

メンバーオブジェクト

sns_PCA9632

PCA9632デバイスのオブジェクトです。ボード定義ではWireの初期化、デバイスの初期化を実施します。原則として後述のPCA9632操作メソッドを用いて制御します。

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_RLED赤
PAL_NOTICE::LED_GLED緑
PAL_NOTICE::LED_BLED青
PAL_NOTICE::LED_WLED白

レジスタ設定定義

定義意味
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は消灯相当で値が大きくなるほど明るく(点灯区間が長くなる)なります。boostfalseにすると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())になります。