diff --git a/include/ssr/AnalogOut.hpp b/include/ssr/AnalogOut.hpp index d2b3b22..b52c45e 100644 --- a/include/ssr/AnalogOut.hpp +++ b/include/ssr/AnalogOut.hpp @@ -5,12 +5,13 @@ #include #include "ssr/Types.hpp" +#include "ssr/Output.hpp" // このライブラリが使う名前空間 namespace ssr { // アナログ出力ピンを扱う -class AnalogOut { +class AnalogOut : public Output { private: // ピンに出力した値 uint16_t _value; @@ -42,6 +43,12 @@ class AnalogOut { * @return 最後に出力した値 */ uint16_t getValue(); + + /** + * 値を出力する + * @param uint16_t value 出力する値 + */ + void write(uint16_t value) override; }; } diff --git a/include/ssr/DigitalOut.hpp b/include/ssr/DigitalOut.hpp index 20a1f5a..1b37193 100644 --- a/include/ssr/DigitalOut.hpp +++ b/include/ssr/DigitalOut.hpp @@ -5,12 +5,13 @@ #include #include "ssr/Types.hpp" +#include "ssr/Output.hpp" // このライブラリが使う名前空間 namespace ssr { // デジタル出力ピンを扱う -class DigitalOut { +class DigitalOut : Output { private: // 設定した値 bool _value; @@ -43,6 +44,12 @@ class DigitalOut { */ void setValue(bool value); + /** + * 値を出力する + * @param bool value 出力する値 + */ + void write(bool value) override; + // 最後に設定した値と逆の値を書き込む void toggle(); }; diff --git a/include/ssr/MotorDriver.hpp b/include/ssr/MotorDriver.hpp index 8aa871e..8930b20 100644 --- a/include/ssr/MotorDriver.hpp +++ b/include/ssr/MotorDriver.hpp @@ -6,12 +6,13 @@ #include #include "ssr/AnalogOut.hpp" #include "ssr/DigitalOut.hpp" +#include "ssr/Output.hpp" // このライブラリが使う名前空間 namespace ssr { // モータードライバを使う MD10C R3(CYTRON TECHNOLOGY)対応 -class MotorDriver { +class MotorDriver : public Output { public: // PWMピン AnalogOut pwm; @@ -39,6 +40,12 @@ class MotorDriver { * @param int16_t 出力するパワー。範囲は-255~255 */ void setPower(int16_t power); + + /** + * パワーを出力する + * @param int16_t value 出力するパワー。範囲は-255~255 + */ + void write(int16_t value) override; }; } diff --git a/include/ssr/Output.hpp b/include/ssr/Output.hpp new file mode 100644 index 0000000..4771521 --- /dev/null +++ b/include/ssr/Output.hpp @@ -0,0 +1,24 @@ +#pragma once + +#ifndef SSR_OUTPUT_HPP +#define SSR_OUTPUT_HPP + +// このライブラリが使う名前空間 +namespace ssr { + +/** + * 出力するもの全般の抽象型 + * @tparam ArgT 出力する値の型 + */ +template class Output { +public: + /** + * 値を出力する + * @param ArgT value 出力する値 + */ + virtual void write(ArgT value) = 0; +}; + +} /* namespace ssr */ + +#endif /* SSR_OUTPUT_HPP */ diff --git a/src/ssr/AnalogOut.cpp b/src/ssr/AnalogOut.cpp index cd5d106..dcfa680 100644 --- a/src/ssr/AnalogOut.cpp +++ b/src/ssr/AnalogOut.cpp @@ -16,4 +16,8 @@ void ssr::AnalogOut::setValue(uint16_t value) { uint16_t ssr::AnalogOut::getValue() { return _value; +} + +void ssr::AnalogOut::write(uint16_t value) { + setValue(value); } \ No newline at end of file diff --git a/src/ssr/DigitalOut.cpp b/src/ssr/DigitalOut.cpp index 8bf273e..7a73d62 100644 --- a/src/ssr/DigitalOut.cpp +++ b/src/ssr/DigitalOut.cpp @@ -18,6 +18,10 @@ void ssr::DigitalOut::setValue(bool value) { digitalWrite(pin, _value); } +void ssr::DigitalOut::write(bool value) { + setValue(value); +} + void ssr::DigitalOut::toggle() { setValue(!_value); } diff --git a/src/ssr/MotorDriver.cpp b/src/ssr/MotorDriver.cpp index 7655006..97106c0 100644 --- a/src/ssr/MotorDriver.cpp +++ b/src/ssr/MotorDriver.cpp @@ -18,3 +18,7 @@ void ssr::MotorDriver::setPower(int16_t power) { dir.setValue(power >= 0); pwm.setValue(abs(power)); } + +void ssr::MotorDriver::write(int16_t value) { + setPower(value); +}