動作確認済み

Dependents:   NewMD2 NewMD3

Revision:
1:b85088467ae0
Child:
2:3d70888e91c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GMD_impl.hpp	Sat Jul 02 06:16:41 2016 +0000
@@ -0,0 +1,57 @@
+#include <algorithm>
+#include "GMD.hpp"
+
+template <size_t MIN, size_t MAX>
+const float GMD<MIN, MAX>::_frequency_to_tick_coeff = 3300.0f;
+
+template <size_t MIN, size_t MAX>
+const uint32_t GMD<MIN, MAX>::_default_frequency_kHz = 50;
+
+template <size_t MIN, size_t MAX>
+GMD<MIN, MAX>::GMD(PinName p0, PinName p1, PinName shut_down) : _shut_down(shut_down, 1) {
+    _pwm[0] = new FastPWM(p0);
+    _pwm[1] = new FastPWM(p1);
+    
+    set_frequency_kHz(_default_frequency_kHz);
+}
+
+template <size_t MIN, size_t MAX>
+void GMD<MIN, MAX>::set_frequency_kHz(float f_kHz) {
+    _pwm[0]->period_ticks(_frequency_to_tick_coeff / f_kHz);
+    _pwm[1]->period_ticks(_frequency_to_tick_coeff / f_kHz);
+}
+
+float sign(float v) {
+    if (v < 0.0f) {
+        return -1.0f;
+    }
+    return 1.0f;
+}
+
+template <size_t MIN, size_t MAX>
+float GMD<MIN, MAX>::set(float p) {
+    p = std::max(-1.0f, std::min(p, 1.0f));
+    p = p * (MAX - MIN) + MIN;
+    p *= 0.01f;
+    
+    if (p < 0.0f) {
+        _pwm[0]->write(p);
+        _pwm[1]->write(0.0f);
+    } else {
+        _pwm[0]->write(0.0f);
+        _pwm[1]->write(p);
+    }
+    _shut_down = 1;
+    return p;
+}
+
+template <size_t MIN, size_t MAX>
+void GMD<MIN, MAX>::release() {
+    _shut_down = 0;
+}
+
+template <size_t MIN, size_t MAX>
+float GMD<MIN, MAX>::operator=(float p) {
+    return set(p);
+}
+