FILO()は後に保存した16ビットデータから順に出力します。
bool FILO(uint8_t filo_id, bool IN, bool OUT, uint16_t input, uint16_t &output, uint8_t size, bool reset = false)
| コマンド | 引数 | 戻り値 | 動作 |
|---|---|---|---|
FILO(filo_id, IN, OUT, input, output, size, reset) | uint8_t filo_idbool IN — 立ち上がりエッジで入力を保存bool OUT — 立ち上がりエッジで出力uint16_t input — 保存するワードuint16_t &output — 出力値を受け取る参照変数uint8_t size — バッファサイズbool reset = false — バッファの初期化 | bool | 後に保存した16ビットデータから順に出力します。 |
シリアルモニタからaを送ると次の番号を保存し、pを送ると最後に保存した番号を取り出します。cでバッファを消去します。1文字ずつ送って動作を確認できます。
uint16_t nextNumber = 0; uint16_t lastNumber = 0; void setup() { Serial.begin(115200); } void loop() { if (!Serial.available()) return; const char action = Serial.read(); const bool store = action == 'a'; const bool retrieve = action == 'p'; const bool clearBuffer = action == 'c'; if (store) ++nextNumber; const bool ok = FILO(0, store, retrieve, nextNumber, lastNumber, 16, clearBuffer); // 番号を保存し、取り出し信号で最後の番号を読み出します。 FILO(0, false, false, nextNumber, lastNumber, 16, false); // 次の文字でも立ち上がり信号を作れるよう入力をLOWに戻します。 if (retrieve && ok) Serial.println(lastNumber); if (retrieve && !ok) Serial.println(F("Buffer empty")); }
IN、OUT、CU、CDは立ち上がり時に動作します。各カウンタ・バッファに固有のidを使用し、sizeは必要な範囲で小さく設定してください。