fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

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);
 }