Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:29fc24ce612f
- Child:
- 1:8431b042a2eb
diff -r 000000000000 -r 29fc24ce612f main.cpp
--- /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);
+}