Simple motor controller library, using DIR, PWM, nSLP pin like pololu.

Branch:
use_base
Revision:
9:a5d6835f7168
Parent:
7:4454a344006a
Child:
11:7493df5c5c40
--- a/MotorControler.h	Sat Feb 20 08:05:15 2021 +0000
+++ b/MotorControler.h	Sun Feb 21 09:23:01 2021 +0000
@@ -10,14 +10,6 @@
 }MotorDirection;
 
 typedef enum{
-    POLOLU = 0,
-    TEXNITIS = 1,
-    HOGE = 2,
-    FUGA = 3,
-    OTHER = 4,
-}DriverType;
-
-typedef enum{
     SM = 0,
     LAP = 1,
 }ControlType;
@@ -25,7 +17,7 @@
 class MotorControler
 {
     public:
-    MotorControler(PinName DIR, PinName PWM, PinName nSLP, DriverType md_type=POLOLU, ControlType control_type=SM);
+    MotorControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM);
     float operator = (float speed);
     float operator + (float speed);
     float operator += (float speed);
@@ -36,8 +28,8 @@
     float operator / (float val);
     float operator /= (float val);
     
-    void enableDriver();
-    void disableDriver();
+    virtual void enableDriver(){}
+    virtual void disableDriver(){}
     
     // speed(-1.0 - 1.0)
     void setSpeed(float speed);
@@ -51,15 +43,73 @@
     // frequency[Hz]
     void setPwmFrequency(float frequency);
     
-    private:
+    protected:
     // if you want use LAP control, change DigitalOut -> PwmOut DIR_
     DigitalOut DIR_;
     PwmOut PWM_;
     DigitalOut nSLP_;
     uint8_t reverse_direction_;
-    DriverType md_type_;
     ControlType control_type_;
     float current_speed_;
 };
 
+class POLOLUControler : public MotorControler
+{
+    public:
+    POLOLUControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM) : MotorControler(DIR, PWM, nSLP, control_type)
+    {
+    }
+    
+    virtual void enableDriver()
+    {
+        nSLP_ = 1;
+    }
+    
+    virtual void disableDriver()
+    {
+        nSLP_ = 0;
+    }
+    
+    using MotorControler::operator=;
+    using MotorControler::operator+;
+    using MotorControler::operator+=;
+    using MotorControler::operator-;
+    using MotorControler::operator-=;
+    using MotorControler::operator*;
+    using MotorControler::operator*=;
+    using MotorControler::operator/;
+    using MotorControler::operator/=;
+};
+
+
+class TEXNITISControler : public MotorControler
+{
+    public:
+    TEXNITISControler(PinName DIR, PinName PWM, PinName nSLP, ControlType control_type=SM) : MotorControler(DIR, PWM, nSLP, control_type)
+    {
+        nSLP_ = 0;
+    }
+    
+    virtual void enableDriver()
+    {
+        // do nothing;
+    }
+    
+    virtual void disableDriver()
+    {
+        PWM_ = 0;
+    }
+    
+    using MotorControler::operator=;
+    using MotorControler::operator+;
+    using MotorControler::operator+=;
+    using MotorControler::operator-;
+    using MotorControler::operator-=;
+    using MotorControler::operator*;
+    using MotorControler::operator*=;
+    using MotorControler::operator/;
+    using MotorControler::operator/=;
+};
+
+
 #endif
\ No newline at end of file