見出し画像

【Arduino】クラスを作ってみる1

今回は、ストップウォッチをクラス化したものを作ることにしました。
自分自身まだまだ初歩的なことしかできませんが、ちょっとずつやっていきたいと思いますので、よろしくお願いします。
製作環境
・Visual Studio Code
・Windows10
・Arduino Nano
※Visual Studio CodeでArduino環境構築は割愛させていただきます。

1.ストップウォッチの細分化

 まずは、作りたいものをクラス化するにあたって構成(部品)を考えていきたいと思います。
・時間の計測
・ボタンの入力
・ラップタイムの記録
・ディスプレイに表示
ざっくりとこんな感じ?

2.時間の計測を作ってみる

 時間の計測ということで、クラス名を「Timer」で作ってみる。
Timer.h ↓

#define Timer_h 

//時間管理クラス
class Timer
{
   public:
       Timer();
       ~Timer();
       void        Start(void);
       float       Stop(void);

       typedef memory(){
           uint32_t a
       }m_memory

   private:
       uint32_t    m_startTime;
       uint32_t    m_stopTime;
};
#endif

Timer.cpp ↓

#include    "Timer.h"

Timer::Timer()
{
   m_startTime = 0;
   m_stopTime = 0;
}

Timer::~Timer(){}

/**
* 計測を開始する
**/
void Timer::Start(void)
{   
   m_startTime = millis();     //開始したときの時間を格納

   Serial.print("start :");    //コンソールに出力
   Serial.print(m_startTime);
   Serial.println("ms");
}

/**
* 計測終了時間を返す
**/
float Timer::Stop(void)
{
   float res = 0;
   
   //計測が開始されているとき、計測終了時間を格納
   if (m_startTime != 0){
       m_stopTime = millis();      //終了時間を格納

       Serial.print("stop :");     //コンソールに出力
       Serial.print(m_stopTime);
       Serial.println("ms");
       
       res = (m_stopTime - m_startTime)/1000;  //計測時間の計算
       
       m_startTime = 0;    //開始時間の初期化
   }
   return res;
}

stopwatch.ino ↓
シリアルコマンドで '1' を送ると計測開始・'2' を送ると計測終了

#include "Timer.h"
#include <SoftwareSerial.h>

Timer time; //Timerクラスのインスタンスを作成
// String g_str = "";

void setup() {
 Serial.begin(115200);   //通信速度を初期化
 Serial.println("USING Timer class"); //デバッグよう出力
}

void loop() {
 char key = '\0';
 float measurval = 0, raptime = 0;
 
 //データがあった時だけ、処理を行う
 if (Serial.available()) { //受信データはあるか?
   key = Serial.read();    //1文字だけ読み込む
   Serial.write(key);      //1文字だけ送信。受信データをそのまま送り返す。
   Serial.print("\n");     //改行
 }

 //keyの中身で条件分岐
 switch (key)
 {
 case '1':
   time.Start(); //スタート
   break;
 case '2':
   measurval = time.Stop();  //ストップ
   Serial.print(measurval);  //計測時間をコンソール出力
   Serial.println("s");
   break;
 default:
   break;
 }
 key = 0;  //格納した1文字を削除

}

3.出力結果

[Info] Opened the serial port - COM4
USING Timer class
1
start :25172ms

2
stop :30885ms
5.00s

4.まとめ

 今回はここまでにして、「時間の計測」をクラス化したが見ての通り小数点以下は”.00”で表示されてしまうので改善点として、別の投稿で取り組みたいと思います。
次はラップタイムを記憶できるようにしてみる。

つたない投稿内容になってしましましたが、
最後まで見ていただき、誠にありがとうございました。

この記事が気に入ったらサポートをしてみませんか?