====== FIFO() ====== ''FIFO()''は先に保存した16ビットデータから順に出力します。 {{:ja-jp_commands:reference:fifo.svg?900|FIFO コマンドの動作フロー}} ''bool FIFO(uint8_t fifo_id, bool IN, bool OUT, uint16_t input, uint16_t &output, uint8_t size, bool reset = false)'' ===== コマンド ===== ^ コマンド ^ 引数 ^ 戻り値 ^ 動作 ^ | ''FIFO(fifo_id, IN, OUT, input, output, size, reset)'' | ''uint8_t fifo_id'' — バッファ識別番号\\ ''bool IN'' — 立ち上がりエッジで入力を保存\\ ''bool OUT'' — 立ち上がりエッジで出力\\ ''uint16_t input'' — 保存するワード\\ ''uint16_t &output'' — 出力値を受け取る参照変数\\ ''uint8_t size'' — バッファサイズ\\ ''bool reset = false'' — バッファの初期化 | ''bool'' | 先に保存した16ビットデータから順に出力します。 | ===== 使用例 ===== シリアルモニタから''i''を2回送り、10と20を保存します。''o''を2回送ると10、20の順に出力されます。''r''でバッファを空にします。 uint16_t nextValue = 10; uint16_t removedValue = 0; void setup() { Serial.begin(115200); Serial.println(F("i: store, o: take, r: reset")); } void loop() { if (!Serial.available()) return; const char key = Serial.read(); const bool store = key == 'i'; const bool take = key == 'o'; const bool reset = key == 'r'; if (!store && !take && !reset) return; const bool ok = FIFO(0, store, take, nextValue, removedValue, 4, reset); // INまたはOUTの立ち上がり時に値を保存・取り出します。 FIFO(0, false, false, 0, removedValue, 4); // 次の入力でも立ち上がりを検出できるよう、INとOUTをOFFに戻します。 if (reset) { nextValue = 10; Serial.println(F("buffer cleared")); } else if (!ok) { Serial.println(F("buffer full or empty")); } else if (store) { Serial.print(F("stored: ")); Serial.println(nextValue); nextValue += 10; } else { Serial.print(F("taken: ")); Serial.println(removedValue); } } 満杯のバッファへの保存、空のバッファからの取り出しは失敗します。 ===== 注意事項 ===== ''IN''、''OUT''、''CU''、''CD''は立ち上がり時に動作します。各カウンタ・バッファに固有の''id''を使用し、''size''は必要な範囲で小さく設定してください。 ===== 同じカテゴリの内蔵コマンド ===== * [[:ja-jp_commands:reference:filo|FILO() 詳細説明を見る]] [[:ja-jp_commands:builtin|← 内蔵コマンド一覧]]