注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

Arduinoでマルチプロセス、並列処理(疑似マルチタスク)を使ってみた

ここでは「Arduino」でマルチプロセス、並列処理(疑似マルチタスク)を行う方法を紹介します。

 

この記事を読むことで

Arduinoを並列処理させる方法

TimedAction関数のセットアップ方法

フルカラーLEDとステッピングモーターのマルチプロセス

を知ることができます。

 

ArduinoはRaspberry Piのようにマルチプロセスで動作させることはできませんが(CPUの関係上)、疑似的なマルチプロセスは可能です。

また

一つのプロセスでCPUを独占してしまうと、二つ目以上のプロセスが機能しない

点に注意してください。

 

実際の並列処理はこのような感じになります。

 

 

このように、フルカラーLEDとステッピングモーターを並列処理で疑似的に動かすことができます。

 

並列処理のイメージができたら、早速始めていきましょう。

 

Arduino並列処理用ライブラリのインストール

Arduinoで並列処理用ライブラリ「TimedAction」をインストールし、Arduinoで呼び出せるように設定を行っていきます。

 

TimedActionのダウンロード

まずはArduino公式ページから「TimedAction」のライブラリをインストールします。

 

公式:Arduino Playground – TimedAction

 

Download, install and import の欄に

Download here Attach:TimedAction-1_6.zip

とあるので、クリックしてダウンロードします。

 

attach_timeaction

 

ダウンロード&ZIPファイルを展開したら、「TimedAction.h」のヘッダーファイルに記述されている

# include “WProgram.h” ⇄ # include “Arduino.h”

と変更します。

 

#ifndef TIMEDACTION_H
#define TIMEDACTION_H

// #include "WProgram.h"
#include "Arduino.h"

 

ダウンロードしたファイルに変更を加えたくないので、ここではコメントアウトで対応しています。

 

TimedActionをプログラムフォルダへコピーする

変更が完了したら、ArduinoのプログラムフォルダにTimedAction関数をコピーします。

 

C:/Program Files(x86)/Arduino/libraries

とpathを移動し、librariesへ先ほどのTimedActionフォルダ全てをコピー&ペーストします。

 

TimedAction_import

 

これで、Arduino IDEからTimedActionを呼び出すことができます。

 

Arduinoでマルチプロセス・並列処理を行う

TimedActionが使えるようになったら、実際にフルカラーLEDとステッピングモーターを疑似的に並列処理させるプログラムを記述してきます。

 

TiemdActionによるマルチプロセス・並列処理の基礎

TimedActionを使ったマルチプロセス・並列処理は基本的に以下のようにプログラムすればOKです。

 

#include <TimedAction.h>

void stepper_control();
void led_control();

TimedAction motorAction = TimedAction(3000,stepper_control);
TimedAction ledAction = TimedAction(2000,led_control);

void setup() {

}

void loop() {
  motorAction.check();
  ledAction.check();
}

void stepper_control() {

}

void led_control() {
  
}

 

予め、並列処理させたい関数を宣言しておき

TimedAction 関数宣言 = TimedAction(並列処理の間隔, 並列処理用の関数) ;

と記述します。

 

今回は、ステッピングモーターとフルカラーLEDの計2つをマルチプロセス・並列処理させたいので、2つTimedActionで関数宣言をしています。

関数宣言したら、void loop(){}ないで、TimedActionで宣言した関数をループさせるだけで完了です。

 

Arduinoによるマルチプロセス・並列処理プログラム例

ArduinoとTimedActionを使ったマルチプロセス・並列処理のプログラムは全206行あるため、「GitHub」にて公開しました。

RGBフルカラーLEDとステッピングモーターを用いた自作回転台のプログラム全文をご覧になりたい方は、お手数をおかけしますが、別途こちらよりご覧ください。

 

GitHub:takuatelier

 

 

以上、Arduinoでのマルチプロセス・並列処理の紹介でした。

Arduinoを使って並列処理をしてみたい方のお役に立てば幸いです。

 

参考にしたサイト

arduinoで並列処理(ノンプリエンプティブ) :Qiita

 

お疲れ様でした。

arduino_timedaction_thumbnail
学びに関する情報をチェック!