LoginSignup
6
4

More than 3 years have passed since last update.

Arduino IDE(C++) で LILO (queue)・LIFO (stack) を使ってみる

Last updated at Posted at 2019-06-28

この記事について

Arduino IDE の開発 で FIFO / FILO の処理をしてみます。

キューとスタック

一時的にデータを溜め込んでおいて、あとで1個づつ処理したいこと、よくありますよね?
C++ の標準的な手法で解決してみます。
今回は Arduino IDE での開発を想定してみます。

なお、いわゆる普通の Arduino (Unoやそのクローンなど)ではコンパイルが通らないようです。
ESP-WROOM-02 / 32 であれば問題なく動作するようなので、そちらで動かしてみます。

FIFO処理 (queue:キュー)

FIFO とは First In, First Out の略、つまり 先入れ先出し です。
データを入れ物に溜め込んでおいて、先に入れたものから順に取り出していくようなイメージです。

使い方

説明は省略。ソースを見れば誰でも分かると思う。
詳細は このへん を確認しましょう。

queue.ino
#include <queue>

std::queue<int> q;

void setup() {
  Serial.begin(115200);
  Serial.println("");

  // キューに値を貯め込む
  q.push(1);
  q.push(2);
  q.push(3);

  // キューのサイズを確認
  int size = q.size();
  // 3 が表示される
  Serial.printf("size=%d\n", size);

  // キューから値を取得する
  int value = q.front();  
  // 1 が表示される
  Serial.printf("value=%d\n", value);

  // キューの値を捨てる(FIFOなので先頭の値が捨てられる)
  q.pop();

  // キューから値を取得する
  value = q.front();  
  // 2 が表示される
  Serial.printf("value=%d\n", value);
}

void loop() {
}

FILO処理 (stack:スタック)

FILO とは First In, Last Out の略、つまり 先入れ後出し です。
データを入れ物に溜め込んでおいて、後に入れたものから順に取り出していくようなイメージです。

使い方

上記と同様に説明は省略。
詳細は このへん を確認しましょう。

stack.ino
#include <stack>

std::stack<int> s;

void setup() {
  Serial.begin(115200);
  Serial.println("");

  // スタックに値を貯め込む
  s.push(1);
  s.push(2);
  s.push(3);

  // スタックのサイズを確認
  int size = s.size();
  // 3 が表示される
  Serial.printf("size=%d\n", size);

  // スタックから値を取得する(FILOなので最後の値が取得される)
  int value = s.top();  
  // 3 が表示される
  Serial.printf("value=%d\n", value);

  // スタックの値を捨てる(FILOなので最後の値が捨てられる)
  s.pop();

  // スタックから値を取得する
  value = s.top();  
  // 2 が表示される
  Serial.printf("value=%d\n", value);
}

void loop() {
}

まとめ

C++って便利ですねw
Arduino IDEで開発をしていると、Cでの開発に頭が行ってしまい、C++の標準的な仕組みを忘れがちなので、面倒な処理をやる必要が出てきたらC++を少し調べてみましょう。

6
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4