Dependents:   ShootingSystem

Revision:
2:5ec2a3097d4c
Parent:
1:42d2772575c5
--- a/AmmoPusher.h	Fri Aug 21 04:52:43 2015 +0000
+++ b/AmmoPusher.h	Wed Oct 14 03:52:34 2015 +0000
@@ -2,27 +2,51 @@
 #define INCLUDED_AMMO_PUSHER_H
 
 #include "mbed.h"
-class I2CMotor;
+#include "I2CDevice.h"
 
-class AmmoPusher {
+class AmmoPusher : public I2CDevice{
 public:
-    AmmoPusher( I2CMotor* drawerMotor );
+    enum ActionType{
+        NO_OPERATION,
+        DRAWING,
+        PUSHING
+    };
+    enum State{
+        BETWEEN,
+        HAS_FINISHED_DRAWING,
+        HAS_FINISHED_PUSHING
+    };
+
+    AmmoPusher( char address );
     
-    void update();
-    void draw();
-    void push();
+    void push(){
+        setActionType( PUSHING );
+    }
+    void draw(){
+        setActionType( DRAWING );
+    }
+    void setActionType( ActionType action ){
+        mActionType = action;
+    }
+    State getState(){
+        return mState;
+    }
+    bool isWorking(){
+        return ( ( mState == BETWEEN ) && ( mActionType != NO_OPERATION ) );
+    }
+    bool hasPushed(){
+        return ( mState ==  HAS_FINISHED_PUSHING );
+    }
+    bool hasDrawn(){
+        return ( mState ==  HAS_FINISHED_DRAWING );
+    }
     
-    bool hasPusherFinishedDrawing();
-    bool hasPusherFinishedPushing();
+    virtual int write();
+    virtual int read();
     
 private:
-    static const float mDuty;
-    static const PinName mDrawingLimitSwitchPinName;
-    static const PinName mPushingLimitSwitchPinName;
-
-    DigitalIn* mDrawingLimitSwitch;
-    DigitalIn* mPushingLimitSwitch;
-    I2CMotor* mDrawerMotor;
+    ActionType mActionType;
+    State mState;
 };
 
 #endif