Keisuke Sehara
/
STM32_Whisking
fast-feedback virtual target task code on STM Nucleo
Diff: pulse.cpp
- Revision:
- 20:4c06d3041337
- Parent:
- 15:20f7f737c256
--- a/pulse.cpp Mon Jul 02 08:26:44 2018 +0000 +++ b/pulse.cpp Mon Jul 02 09:04:45 2018 +0000 @@ -1,12 +1,16 @@ #include "pulse.h" -Pulse::Pulse(PinName pin, const uint64_t& onset_us, const uint64_t& duration_us): +Pulse::Pulse(PinName pin, + const uint64_t& onset_us, + const uint64_t& duration_us, + const uint64_t& blink_us): out_(pin, 0), enabled_(true), stat_(Rest) { setOnset(onset_us); setDuration(duration_us); + setBlinkDuration(blink_us); } void Pulse::setEnabled(const bool& value) @@ -29,6 +33,11 @@ dur_ = value_us; } +void Pulse::setBlinkDuration(const uint64_t& value_us) +{ + blinkdur_ = value_us; +} + void Pulse::attachTurnOnCallback(Callback<void ()> cb) { turnon_ = cb; @@ -69,6 +78,9 @@ stat_ = Active; out_.write(1); timer_.attach_us(callback(this, &Pulse::stop), dur_); + if (blinkdur_ > 0) { + blinker_.attach_us(callback(this, &Pulse::blink), blinkdur_); + } if (turnon_) { turnon_(); } @@ -79,6 +91,8 @@ if (!enabled_) return; timer_.detach(); + blinker_.detach(); + out_.write(0); stat_ = Rest; if (turnoff_) { @@ -86,6 +100,11 @@ } } +void Pulse::blink() +{ + out_ = !out_; +} + void Pulse::direct(const bool& value) { out_.write(value? 1:0); }