This is a library for the electrical control of muscles. 筋肉に電気を流して制御して遊ぶためのライブラリ

Committer:
mhdk
Date:
Sun Jan 10 21:04:04 2021 +0000
Revision:
0:f70df5665a61
init

Who changed what in which revision?

UserRevisionLine numberNew 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 }