![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
2018 HongoMechaTech A
lib/LinearFunction.cpp@0:e83b840a5f86, 2018-09-18 (annotated)
- Committer:
- Komazawa_sun
- Date:
- Tue Sep 18 03:11:01 2018 +0000
- Revision:
- 0:e83b840a5f86
????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Komazawa_sun | 0:e83b840a5f86 | 1 | #include "LinearFunction.h" |
Komazawa_sun | 0:e83b840a5f86 | 2 | |
Komazawa_sun | 0:e83b840a5f86 | 3 | LinearFunction::LinearFunction(unsigned int op_period_ms): |
Komazawa_sun | 0:e83b840a5f86 | 4 | _op_period(((op_period_ms > 0) ?(op_period_ms < LF_MAX_TIME) ?op_period_ms :LF_MAX_TIME :1) / 1000.0) |
Komazawa_sun | 0:e83b840a5f86 | 5 | { |
Komazawa_sun | 0:e83b840a5f86 | 6 | _ticker.attach(this, &LinearFunction::_on_operate, _op_period); |
Komazawa_sun | 0:e83b840a5f86 | 7 | } |
Komazawa_sun | 0:e83b840a5f86 | 8 | |
Komazawa_sun | 0:e83b840a5f86 | 9 | void LinearFunction::set(const double val, const double intercept, const unsigned int ct_ms) |
Komazawa_sun | 0:e83b840a5f86 | 10 | { |
Komazawa_sun | 0:e83b840a5f86 | 11 | |
Komazawa_sun | 0:e83b840a5f86 | 12 | if(_range != val - intercept){ |
Komazawa_sun | 0:e83b840a5f86 | 13 | reset(); |
Komazawa_sun | 0:e83b840a5f86 | 14 | _range = val - intercept; |
Komazawa_sun | 0:e83b840a5f86 | 15 | } |
Komazawa_sun | 0:e83b840a5f86 | 16 | |
Komazawa_sun | 0:e83b840a5f86 | 17 | _intercept = intercept; |
Komazawa_sun | 0:e83b840a5f86 | 18 | |
Komazawa_sun | 0:e83b840a5f86 | 19 | _timer.start(); |
Komazawa_sun | 0:e83b840a5f86 | 20 | _ct_s = ((ct_ms > 0) ?(ct_ms > _op_period * LF_MAX_TIME) ?ct_ms :_op_period * LF_MAX_TIME :1) / 1000.0; |
Komazawa_sun | 0:e83b840a5f86 | 21 | } |
Komazawa_sun | 0:e83b840a5f86 | 22 | |
Komazawa_sun | 0:e83b840a5f86 | 23 | void LinearFunction::reset() |
Komazawa_sun | 0:e83b840a5f86 | 24 | { |
Komazawa_sun | 0:e83b840a5f86 | 25 | _ct_s = 0; |
Komazawa_sun | 0:e83b840a5f86 | 26 | _range = 0; |
Komazawa_sun | 0:e83b840a5f86 | 27 | _intercept = 0; |
Komazawa_sun | 0:e83b840a5f86 | 28 | _current_val = 0; |
Komazawa_sun | 0:e83b840a5f86 | 29 | _timer.reset(); |
Komazawa_sun | 0:e83b840a5f86 | 30 | _timer.stop(); |
Komazawa_sun | 0:e83b840a5f86 | 31 | } |
Komazawa_sun | 0:e83b840a5f86 | 32 | |
Komazawa_sun | 0:e83b840a5f86 | 33 | double LinearFunction::get_val() |
Komazawa_sun | 0:e83b840a5f86 | 34 | { |
Komazawa_sun | 0:e83b840a5f86 | 35 | return _current_val + _intercept; |
Komazawa_sun | 0:e83b840a5f86 | 36 | } |
Komazawa_sun | 0:e83b840a5f86 | 37 | |
Komazawa_sun | 0:e83b840a5f86 | 38 | void LinearFunction::_on_operate() |
Komazawa_sun | 0:e83b840a5f86 | 39 | { |
Komazawa_sun | 0:e83b840a5f86 | 40 | |
Komazawa_sun | 0:e83b840a5f86 | 41 | if(_ct_s <= _timer.read_ms() / 1000.0){ |
Komazawa_sun | 0:e83b840a5f86 | 42 | _current_val = _range; |
Komazawa_sun | 0:e83b840a5f86 | 43 | _timer.stop(); |
Komazawa_sun | 0:e83b840a5f86 | 44 | if(_current_val != _range) |
Komazawa_sun | 0:e83b840a5f86 | 45 | _timer.reset(); |
Komazawa_sun | 0:e83b840a5f86 | 46 | }else{ |
Komazawa_sun | 0:e83b840a5f86 | 47 | _current_val = (_range / _ct_s) * (_timer.read_ms() / 1000.0); |
Komazawa_sun | 0:e83b840a5f86 | 48 | } |
Komazawa_sun | 0:e83b840a5f86 | 49 | |
Komazawa_sun | 0:e83b840a5f86 | 50 | } |