eka sinambela / Mbed 2 deprecated mbed_stepper_motors

Dependencies:   mbed

Revision:
0:29fc24ce612f
Child:
1:8431b042a2eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jun 16 09:21:00 2016 +0000
@@ -0,0 +1,122 @@
+#include "mbed.h"
+#include "DRV8825.h"
+#define MAX_SPEED 8000
+#define MICROSTEPS_PER_STEP 32
+// add boundaries
+
+//DigitalOut myled(LED1);
+    int PULL = 1;
+    int PUSH = 0;
+    int SALT = 1;
+    int PURE = 0;
+    int PREVIOUS_DIRECTION_SALT = -1;
+    int PREVIOUS_DIRECTION_PURE = -1;
+    int POSITION_SALT = 14;
+    int POSITION_PURE = 27;
+    int MAX = 35;
+    int MIN = 0; 
+    
+    DRV8825 stpr_mtr(p21, p27, p28, p29, p22, p23);
+    DRV8825 stpr_mtr2(p24, p27, p28, p29, p25, p26);
+
+void add_water(int type, int mililiters, int DIRECTION){
+        
+    int MOVEMENT = 1800; //constant for 1 mL
+    int STEP_EXTRA = 2500; //for the other mL's
+    
+    if (mililiters > 0){
+        if (type == SALT){
+            if (DIRECTION == PULL){
+                if (POSITION_SALT + mililiters >= MAX)
+                    mililiters = 0;
+                else   
+                    POSITION_SALT = POSITION_SALT + mililiters;
+            }else{    
+                if (POSITION_SALT - mililiters <= MIN)
+                    mililiters = 0;
+                else 
+                    POSITION_SALT = POSITION_SALT - mililiters;
+            }    
+        }else { 
+            if (DIRECTION == PULL) 
+                if (POSITION_PURE + mililiters >= MAX)
+                    mililiters = 0;
+                else 
+                    POSITION_PURE = POSITION_PURE + mililiters;
+            else   
+                if (POSITION_PURE - mililiters <= MIN)
+                     mililiters = 0;
+                else  
+                    POSITION_PURE = POSITION_PURE - mililiters;
+        }       
+            
+        //accelerate
+        for (int i = 25; i < MAX_SPEED; i+=20) {
+            if (type == SALT)
+                stpr_mtr.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);
+           else 
+               stpr_mtr2.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);      
+        } 
+    
+        //fix the changing of directions for pure
+        if (type == PURE){
+                
+            mililiters = mililiters * 2.2;    
+           if (PREVIOUS_DIRECTION_PURE != DIRECTION)
+              mililiters = mililiters + 1;
+        }    
+    
+        //fix the changing of directions for salt
+        if (type == SALT){ 
+            
+          mililiters = mililiters * 0.9;
+          if (PREVIOUS_DIRECTION_PURE != DIRECTION)
+             mililiters = mililiters + 1;
+         //if (PREVIOUS_DIRECTION_SALT == PULL)
+               //mililiters = mililiters + 0.5;      
+        }    
+
+        //move with constant speed
+        for (int i = 1; i < (MOVEMENT + (mililiters - 1)*STEP_EXTRA); i+=1) {
+            if (type == SALT)
+                stpr_mtr.settings(1/MICROSTEPS_PER_STEP, DIRECTION, MAX_SPEED);
+            else
+                stpr_mtr2.settings(1/MICROSTEPS_PER_STEP, DIRECTION, MAX_SPEED);    
+        }
+    
+        //de-accelerate
+        for (int i = MAX_SPEED; i > 0; i-=20) {
+            if (type == SALT)
+                stpr_mtr.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);
+            else
+                stpr_mtr2.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);    
+        }
+    
+        //remember previous direction
+        if (type == SALT)
+            PREVIOUS_DIRECTION_SALT = DIRECTION;
+        else
+            PREVIOUS_DIRECTION_PURE = DIRECTION;  
+         wait(2);
+     }        
+}
+
+int main() {
+    //add_water(PURE, -1, PUSH);
+    //add_water(SALT, -1, PUSH);
+    
+    
+    add_water(SALT, 1, PULL);
+    add_water(SALT, 1, PUSH);
+    add_water(SALT, 2, PULL);
+    add_water(SALT, 2, PUSH);
+    add_water(SALT, 3, PULL);
+    add_water(SALT, 3, PUSH);
+    
+    add_water(PURE, 1, PULL);
+    add_water(PURE, 1, PUSH);
+    add_water(PURE, 2, PULL);
+    add_water(PURE, 2, PUSH);
+    add_water(PURE, 3, PULL);
+    add_water(PURE, 3, PUSH);
+}