This is a library for the electrical control of muscles. 筋肉に電気を流して制御して遊ぶためのライブラリ
MuscleWrite.cpp@0:f70df5665a61, 2021-01-10 (annotated)
- Committer:
- mhdk
- Date:
- Sun Jan 10 21:04:04 2021 +0000
- Revision:
- 0:f70df5665a61
init
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mhdk | 0:f70df5665a61 | 1 | /*! |
mhdk | 0:f70df5665a61 | 2 | * @file MuscleWrite.cpp |
mhdk | 0:f70df5665a61 | 3 | * @brief basic program for muscle controll with mbed/nucleo f446RE |
mhdk | 0:f70df5665a61 | 4 | * @author m.hdk <m.hdk816@gmail.com> |
mhdk | 0:f70df5665a61 | 5 | * @date 2021 |
mhdk | 0:f70df5665a61 | 6 | */ |
mhdk | 0:f70df5665a61 | 7 | |
mhdk | 0:f70df5665a61 | 8 | #include "mbed.h" |
mhdk | 0:f70df5665a61 | 9 | #include "MuscleWrite.h" |
mhdk | 0:f70df5665a61 | 10 | |
mhdk | 0:f70df5665a61 | 11 | MuscleWrite::MuscleWrite(PinName pulse_pin, |
mhdk | 0:f70df5665a61 | 12 | float period, |
mhdk | 0:f70df5665a61 | 13 | float width) |
mhdk | 0:f70df5665a61 | 14 | : pulse_pin_(pulse_pin), period_(period), width_(width) |
mhdk | 0:f70df5665a61 | 15 | { |
mhdk | 0:f70df5665a61 | 16 | out = false; |
mhdk | 0:f70df5665a61 | 17 | pulse_pin_ = 0; |
mhdk | 0:f70df5665a61 | 18 | period_ = period; |
mhdk | 0:f70df5665a61 | 19 | width_ = width; |
mhdk | 0:f70df5665a61 | 20 | } |
mhdk | 0:f70df5665a61 | 21 | |
mhdk | 0:f70df5665a61 | 22 | void MuscleWrite::enable() |
mhdk | 0:f70df5665a61 | 23 | { |
mhdk | 0:f70df5665a61 | 24 | over_cut_width(); |
mhdk | 0:f70df5665a61 | 25 | tic.attach(this, &MuscleWrite::rise, period_); |
mhdk | 0:f70df5665a61 | 26 | } |
mhdk | 0:f70df5665a61 | 27 | |
mhdk | 0:f70df5665a61 | 28 | void MuscleWrite::disable() |
mhdk | 0:f70df5665a61 | 29 | { |
mhdk | 0:f70df5665a61 | 30 | tic.detach(); |
mhdk | 0:f70df5665a61 | 31 | pulse_pin_ = 0; |
mhdk | 0:f70df5665a61 | 32 | out = false; |
mhdk | 0:f70df5665a61 | 33 | } |
mhdk | 0:f70df5665a61 | 34 | |
mhdk | 0:f70df5665a61 | 35 | void MuscleWrite::rise() |
mhdk | 0:f70df5665a61 | 36 | { |
mhdk | 0:f70df5665a61 | 37 | if (out) |
mhdk | 0:f70df5665a61 | 38 | { |
mhdk | 0:f70df5665a61 | 39 | pulse_pin_ = 1; |
mhdk | 0:f70df5665a61 | 40 | tim.attach(this, &MuscleWrite::fall, width_); |
mhdk | 0:f70df5665a61 | 41 | } |
mhdk | 0:f70df5665a61 | 42 | } |
mhdk | 0:f70df5665a61 | 43 | |
mhdk | 0:f70df5665a61 | 44 | void MuscleWrite::fall() |
mhdk | 0:f70df5665a61 | 45 | { |
mhdk | 0:f70df5665a61 | 46 | pulse_pin_ = 0; |
mhdk | 0:f70df5665a61 | 47 | } |
mhdk | 0:f70df5665a61 | 48 | int MuscleWrite::over_cut_width() |
mhdk | 0:f70df5665a61 | 49 | { |
mhdk | 0:f70df5665a61 | 50 | float max = 0.0f; |
mhdk | 0:f70df5665a61 | 51 | max = (period_ / 2.0f); |
mhdk | 0:f70df5665a61 | 52 | if (max < width_) |
mhdk | 0:f70df5665a61 | 53 | { |
mhdk | 0:f70df5665a61 | 54 | width_ = max; |
mhdk | 0:f70df5665a61 | 55 | return 1; |
mhdk | 0:f70df5665a61 | 56 | } |
mhdk | 0:f70df5665a61 | 57 | else |
mhdk | 0:f70df5665a61 | 58 | { |
mhdk | 0:f70df5665a61 | 59 | return 0; |
mhdk | 0:f70df5665a61 | 60 | } |
mhdk | 0:f70df5665a61 | 61 | } |
mhdk | 0:f70df5665a61 | 62 | |
mhdk | 0:f70df5665a61 | 63 | void MuscleWrite::write(bool trg) |
mhdk | 0:f70df5665a61 | 64 | { |
mhdk | 0:f70df5665a61 | 65 | if (trg) |
mhdk | 0:f70df5665a61 | 66 | { |
mhdk | 0:f70df5665a61 | 67 | out = true; |
mhdk | 0:f70df5665a61 | 68 | } |
mhdk | 0:f70df5665a61 | 69 | else |
mhdk | 0:f70df5665a61 | 70 | { |
mhdk | 0:f70df5665a61 | 71 | out = false; |
mhdk | 0:f70df5665a61 | 72 | } |
mhdk | 0:f70df5665a61 | 73 | } |