もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

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);
}

全部同じフォルダ内ですが,一応ファイルの位置関係
20134431433.png


これで,Ledを点滅させるプログラムが完成です

昔作ったプログラムがイケてないので,修正しなくては

Arduinoで遊ぶ 第10回 - 老いぼれしんすけ日記Arduinoで遊ぶ 第10回 - 老いぼれしんすけ日記