Arduinoのオブジェクト指向プログラミング
久しぶりにArduinoを触ろうとして,
「今まで1つの関数に処理を全部書いてるから,また書くの面倒臭いなー」
と思って気がついたのですが・・・
「開発環境がJavaアプリケーションだから,オブジェクト指向型のプログラム書けるんじゃね?」
ちょっと調べたら,すぐ出てきましたよ・・・
C++のようなオブジェクト指向プログラムが書けるみたいです・・・
今まで「setup()」と「loop()」しか使わないで作ってたので,再利用しにくいプログラムになってました・・・
でもこれでArduinoのプログラミングが捗りますわー(´∀`;)
最近までプログラムは素人中の素人だったので仕方ないね
と言ってもC#はよく使っているんですけど,C++はあまり慣れていないので,練習がてらに書いてみました
C++のクラス定義はhファイルとcppファイルが必要です
hファイルには宣言を書いておき,cppファイルには処理を書きます
以下のサイトを参考にしました(ほぼパクry)(追記:リンク切れ?)
基礎編 - densikit.com and the arduino variants
参考にしているサイトのプログラムを違う所は,cppファイルのインクルードファイルが異なるだけです
ちなみに私の環境は「Arduino 1.0.4」です
クラスLedTestの定義
#ifndef LedTest_h #define LedTest_h // クラスの定義 class LedTest { public: LedTest(int pin); // コンストラクタ void on(); // Led点灯 void off(); // Led消灯 private: int m_ledPin; // クラス内で使用するメンバ変数 }; #endif
クラスLedTestの実装
#include "Arduino.h" #include "LedTest.h" // コンストラクタ(初期化処理) LedTest::LedTest(int pin) { m_ledPin = pin; // メンバ変数にピン番号を代入 pinMode(m_ledPin, OUTPUT); // ピンモードを指定 } void LedTest::on(void) { digitalWrite(m_ledPin, HIGH); } void LedTest::off(void) { digitalWrite(m_ledPin, LOW); }
クラス「LedTest」を使ったプログラム
#include "LedTest.h" LedTest led = LedTest(10); // インスタンス生成(ピン10番をLedに使用) void loop() { led.on(); // LED点灯 delay(100); led.off(); // LED消灯 delay(100); }
これで,Ledを点滅させるプログラムが完成です
昔作ったプログラムがイケてないので,修正しなくては