2018 HongoMechaTech A

Dependencies:   mbed

Committer:
Komazawa_sun
Date:
Tue Sep 18 03:11:01 2018 +0000
Revision:
0:e83b840a5f86
????????????????

Who changed what in which revision?

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