UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Motor.hpp
[詳解]
1//
2// 通信経由モーター制御クラス
3//
4// Copyright (c) 2022 udonrobo
5//
6
7#pragma once
8
10#include <algorithm>
11
14#include <Udon/Utility/Show.hpp>
17
18namespace Udon
19{
20
22 template <template <typename> class Writer>
23 class MotorBy
24 {
25 static_assert(Traits::IsWriter<Writer>::value, "Writer is not writer");
26
27 using WriterType = Writer<Message::Motor>;
28 WriterType writer;
29
30 int16_t power; // 出力値 -255 ~ 255
31
32 Udon::Direction direction; // 回転方向
33
34 public:
35
39 MotorBy(WriterType&& writer, Udon::Direction direction = Udon::Direction::Forward)
40 : writer(std::move(writer))
41 , power()
42 , direction(direction)
43 {
44 }
45
48 void move(int16_t p)
49 {
50 power = Constrain(p, (int16_t)-255, (int16_t)255);
51 writer.setMessage({ static_cast<int16_t>(power * Udon::DirectionToSign(direction)) });
53 }
54
56 void stop()
57 {
58 move(0);
59 }
60
62 void show() const
63 {
64 Udon::Show(power);
65 }
66 };
67
68} // namespace Udon
void show() const
出力値をシリアル出力
Definition Motor.hpp:62
void stop()
停止
Definition Motor.hpp:56
MotorBy(WriterType &&writer, Udon::Direction direction=Udon::Direction::Forward)
コンストラクタ
Definition Motor.hpp:39
void move(int16_t p)
出力値を取得
Definition Motor.hpp:48
void MaybeInvokeUpdate(HasMemberFunctionUpdate &rhs)
T に T::update 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition HasMemberFunction.hpp:111
Definition Bit.hpp:12
void Show(Args &&... args)
区切り文字ありで出力する
Definition Show.hpp:339
int DirectionToSign(Direction direction)
Definition Direction.hpp:14
Direction
方向
Definition Direction.hpp:9
@ Forward
Definition Direction.hpp:10
constexpr A Constrain(const A &amt, const B &low, const C &high)
値を指定された範囲内に収める (std::clamp)
Definition Math.hpp:69
Definition Typedef.hpp:94
送信クラスであるか判定
Definition ReaderWriterTraits.hpp:25