■CurieIMU.noInterrupts関数
CurieIMU.hライブラリのCurieIMU.noInterrupts関数は、選択した機能の割り込みを無効にします。
■使用例
CurieIMU.noInterrupts関数を使ったArduinoIDEのプログラム例は図1の通りです。このプログラムを実行するとCurieIMU.interrupt関数で「CURIE_IMU_FREEFALL」機能の割り込みを有効にし、CurieIMU.attachInterrupt関数で割り込み発生時に実行する関数(今回はTESTと言う名前の関数)を指定します。上記セットアップ完了後、Genuino101自体が自由落下したと「CURIE_IMU_FREEFALL」機能が判定すると、図2の様にシリアルモニタ上に「FREEFALL!_end」と出力します。その後CurieIMU.noInterrupts関数により「CURIE_IMU_FREEFALL」機能の割り込みが無効化され、それ以降はGenuino101自体が自由落下したとしてもシリアルモニタ上には何も出力されなくなります。
#include "CurieIMU.h" void TEST () { Serial.println("FREEFALL!_end"); CurieIMU.noInterrupts(CURIE_IMU_FREEFALL);//選択した機能の割り込みを無効にする。 } void setup() { Serial.begin(9600); // シリアル通信を初期化 while (!Serial); // シリアルポートが開くのを待つ Serial.println("Initializing IMU device..."); CurieIMU.begin(); // デバイスの初期化 CurieIMU.setAccelerometerRange(2); // 加速度計の範囲を2Gに設定する CurieIMU.interrupts(CURIE_IMU_FREEFALL);//選択した機能の割り込みを有効にします。 CurieIMU.attachInterrupt(TEST);//割り込みアクションをアタッチします。 } void loop() {}
図1:プログラム例
図2:プログラム実行結果
■「CurieIMU.noInterrupts(int feature)」のパラメータ
feature:割り込みを無効にしたい表1に示すいずれかの機能を指定します。
項目 | 内容 |
CURIE_IMU_FREEFALL | 落下の判定 |
CURIE_IMU_SHOCK | 衝突の判定 |
CURIE_IMU_MOTION | 動くの判定 |
CURIE_IMU_ZERO_MOTION | 止まるの判定 |
CURIE_IMU_STEP | 歩くの判定 |
CURIE_IMU_TAP | 叩くの判定 |
CURIE_IMU_TAP_SHOCK | 強く叩くの判定 |
CURIE_IMU_TAP_QUIET | 弱く叩くの判定 |
CURIE_IMU_DOUBLE_TAP | 二回叩くの判定 |
CURIE_IMU_FIFO_FULL | キュー※1が一杯の判定 |
CURIE_IMU_DATA_READY | データ準備完了の判定 |
※1:キュー
キューとは、先に入力したデータが先に出力されるという特徴をもつデータ構造の一種。
データを入れるときは新しいデータが最後尾につき、データを出すときは一番古いデータが優先して出てくる。
このように、「最初に入った物が最初に出てくる」というデータの入出力方式は「First In First Out」を略して「FIFO」と呼ばれる。
キューは何かの処理を待たせる際によく使われる構造で、逆に最後に入力したデータが先に出力されるというデータ構造は、スタックと呼ばれている。
「CURIE_IMU_FIFO_FULL」と「CURIE_IMU_DATA_READY」について調べたのですが、おそらくジャイロ・加速度センサー(Bosch製BMI160)からCPU(Intel製 IntelCurie)が受け取ったデータの状態を判定する機能ではないかと思います
■その他関数
Curie IMUライブラリに関するその他関数については、コチラをご覧ください。
励みになりますのでよければクリック下さい(^o^)/