概要

Arduinoのコードを書く際に、処理をキューイングして順番に処理をしていきたい時がありました。Arduinoにはarrayはありますが、FIFO(後述)型のキューはデフォルトでは無いため、外部ライブラリをインクルードする必要があります。

結論

いくつかArduinoでキューイングができるライブラリがありますが、下記ライブラリがおすすめです。

レポジトリをzipダウンロードして、Arduino IDEで「スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール」を選択して先程ダウンロードしたzipファイルを選択してインストールしましょう。

使い方例

よくあるキューと同じような使い方で扱うことができます。

基本的な使い方 

#include "Queue.h"
Queue<int> queue = Queue<int>(); 

void setup() {
  Serial.begin(9600);
  queue.push(1);
  queue.push(2);
  Serial.println(queue.pop()); // 1
}

void loop() {
}

pushでキューの中に値を入れて、popで取り出します。

peek

peekはキューの中身を取り出すことなく、先頭の値を返却します。

 

#include "Queue.h"
Queue<int> queue = Queue<int>(); 

void setup() {
  Serial.begin(9600);
  queue.push(1);
  queue.push(2);
  Serial.println(queue.peek()); // 1
  Serial.println(queue.pop()); // 1
  Serial.println(queue.pop()); // 2
}

void loop() {
}

clear

clearはキューの中身を全て削除します。

 

#include "Queue.h"
Queue<int> queue = Queue<int>(); 

void setup() {
  Serial.begin(9600);
  queue.push(1);
  queue.push(2);
  Serial.println(queue.pop()); // 1
  queue.clear();
  Serial.println(queue.pop()); // 0
}

void loop() {
}

キューとスタックの違い

スタックとキューの違い

値を出し入れする仕組みの代表的なものとしてキューとスタックが挙げられます。この2つはキューは先に入れたものが先に出てくる(FIFO = First in, first out)スタックは最後に入れたものが先に出てくる(LIFO = Last in, first out)という違いがあるのでこれを意識しながら使っていきましょう。

私は上図のようなイメージで考えています。スタックは物を上に積み上げていくイメージなので、取り出すときは上から(最後に積んだものから)となります。キューは行列に並ぶイメージで、列に加わる時は最後尾について、列から出ていくときは最前列の人(最初に並んだ人)からとなります。

Arduino

Related Posts

TB6600を使ってステッピングモータをArduinoで動作させる
TB6600を使ってステッピングモータをArduinoで動作させる
概要 TB6600はステッピングモータを制御することができる、ステッピングモータコントローラです。TB6600を用いることで、ステッピングモータの回転速度や回転の粒度、方向などをマイコンから制御できるようになります。本記事ではTB66...
Read More
ACアダプターから得られた電源を回路に組み込む
ACアダプターから得られた電源を回路に組み込む
概要 コンセントから得られる交流の電源を、ACアダプターでDC電源に変換をした上で電子回路に導入したいときの方法について解説をします。 ネジ端子 ACアダプターの端子を+と-に分けてくれるネジ端子がありますので、これを用いることでDC...
Read More
WindowsでArduino Uno互換ボードに書き込む時にシリアルポートが選択できない時の対処法
WindowsでArduino Uno互換ボードに書き込む時にシリアルポートが選択できない時の対処法
概要 Arduino Uno R3の互換ボードを用いる時、WindowsでArduino IDEを開き、シリアルポートを繋げようとした際にグレーアウトされてしまって選択することができない場合があるので、解決方法について解説をします。 ...
Read More