eka sinambela / Mbed 2 deprecated mbed_stepper_motors

Dependencies:   mbed

Committer:
ekasinambela
Date:
Sun Jun 19 21:32:08 2016 +0000
Revision:
1:8431b042a2eb
Parent:
0:29fc24ce612f
Child:
2:5b26538ab9ab
modify stepper motor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ekasinambela 0:29fc24ce612f 1 #include "mbed.h"
ekasinambela 0:29fc24ce612f 2 #include "DRV8825.h"
ekasinambela 0:29fc24ce612f 3 #define MAX_SPEED 8000
ekasinambela 0:29fc24ce612f 4 #define MICROSTEPS_PER_STEP 32
ekasinambela 1:8431b042a2eb 5 #include "Ping.h"
ekasinambela 1:8431b042a2eb 6 #include <stdio.h>
ekasinambela 1:8431b042a2eb 7 #include "TextLCD.h"
ekasinambela 1:8431b042a2eb 8 #include <cmath>
ekasinambela 0:29fc24ce612f 9 // add boundaries
ekasinambela 0:29fc24ce612f 10
ekasinambela 1:8431b042a2eb 11 Ping Pinger(p30);
ekasinambela 1:8431b042a2eb 12 Serial pc(USBTX, USBRX);
ekasinambela 1:8431b042a2eb 13 //TextLCD lcd(p19, p20, p21, p22, p23, p24); // rs, e, d4-d7
ekasinambela 1:8431b042a2eb 14
ekasinambela 0:29fc24ce612f 15 //DigitalOut myled(LED1);
ekasinambela 0:29fc24ce612f 16 int PULL = 1;
ekasinambela 0:29fc24ce612f 17 int PUSH = 0;
ekasinambela 0:29fc24ce612f 18 int SALT = 1;
ekasinambela 0:29fc24ce612f 19 int PURE = 0;
ekasinambela 0:29fc24ce612f 20 int PREVIOUS_DIRECTION_SALT = -1;
ekasinambela 0:29fc24ce612f 21 int PREVIOUS_DIRECTION_PURE = -1;
ekasinambela 1:8431b042a2eb 22 //int POSITION_SALT = 14;
ekasinambela 1:8431b042a2eb 23 //int POSITION_PURE = 27;
ekasinambela 1:8431b042a2eb 24 //int MAX = 35;
ekasinambela 1:8431b042a2eb 25 //int MIN = 0;
ekasinambela 0:29fc24ce612f 26
ekasinambela 0:29fc24ce612f 27 DRV8825 stpr_mtr(p21, p27, p28, p29, p22, p23);
ekasinambela 0:29fc24ce612f 28 DRV8825 stpr_mtr2(p24, p27, p28, p29, p25, p26);
ekasinambela 0:29fc24ce612f 29
ekasinambela 1:8431b042a2eb 30 bool proximity_ok(){
ekasinambela 1:8431b042a2eb 31 int range;
ekasinambela 1:8431b042a2eb 32
ekasinambela 1:8431b042a2eb 33 Pinger.Send();
ekasinambela 1:8431b042a2eb 34 wait(0.1);
ekasinambela 1:8431b042a2eb 35 range = Pinger.Read_cm();
ekasinambela 1:8431b042a2eb 36
ekasinambela 1:8431b042a2eb 37
ekasinambela 1:8431b042a2eb 38 range = range/2;
ekasinambela 1:8431b042a2eb 39 // lcd.printf("Range in cm: %d \n\r", range);
ekasinambela 0:29fc24ce612f 40
ekasinambela 1:8431b042a2eb 41 if (range >= 12){
ekasinambela 1:8431b042a2eb 42 //lcd.printf("Proximity ok");
ekasinambela 1:8431b042a2eb 43 return true;
ekasinambela 1:8431b042a2eb 44 }
ekasinambela 1:8431b042a2eb 45 return false;
ekasinambela 1:8431b042a2eb 46 }
ekasinambela 1:8431b042a2eb 47
ekasinambela 1:8431b042a2eb 48 void add_water(int type, double mililiters, int DIRECTION){
ekasinambela 1:8431b042a2eb 49
ekasinambela 1:8431b042a2eb 50 int MOVEMENT = 4600; //constant for 1 mL
ekasinambela 1:8431b042a2eb 51 double STEP_EXTRA = 3000; //for the other mL's
ekasinambela 0:29fc24ce612f 52
ekasinambela 0:29fc24ce612f 53 //accelerate
ekasinambela 1:8431b042a2eb 54 for (int i = 25; i < MAX_SPEED; i+=20) {
ekasinambela 0:29fc24ce612f 55 if (type == SALT)
ekasinambela 0:29fc24ce612f 56 stpr_mtr.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);
ekasinambela 0:29fc24ce612f 57 else
ekasinambela 1:8431b042a2eb 58 stpr_mtr2.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);
ekasinambela 0:29fc24ce612f 59 }
ekasinambela 0:29fc24ce612f 60
ekasinambela 0:29fc24ce612f 61 //fix the changing of directions for pure
ekasinambela 1:8431b042a2eb 62 if (type == PURE){
ekasinambela 1:8431b042a2eb 63 //mililiters = mililiters * 2.0;
ekasinambela 0:29fc24ce612f 64 if (PREVIOUS_DIRECTION_PURE != DIRECTION)
ekasinambela 1:8431b042a2eb 65 mililiters = mililiters + 1.0;
ekasinambela 0:29fc24ce612f 66 }
ekasinambela 0:29fc24ce612f 67
ekasinambela 0:29fc24ce612f 68 //fix the changing of directions for salt
ekasinambela 1:8431b042a2eb 69 if (type == SALT){
ekasinambela 1:8431b042a2eb 70 //mililiters = mililiters * 2.0;
ekasinambela 1:8431b042a2eb 71 if (PREVIOUS_DIRECTION_SALT != DIRECTION)
ekasinambela 1:8431b042a2eb 72 mililiters = mililiters + 1.0;
ekasinambela 0:29fc24ce612f 73 //if (PREVIOUS_DIRECTION_SALT == PULL)
ekasinambela 0:29fc24ce612f 74 //mililiters = mililiters + 0.5;
ekasinambela 0:29fc24ce612f 75 }
ekasinambela 0:29fc24ce612f 76
ekasinambela 0:29fc24ce612f 77 //move with constant speed
ekasinambela 1:8431b042a2eb 78 for (int i = 1; i < (MOVEMENT + (int)floor(((mililiters - 1.0)*STEP_EXTRA))); i+=1) {
ekasinambela 0:29fc24ce612f 79 if (type == SALT)
ekasinambela 0:29fc24ce612f 80 stpr_mtr.settings(1/MICROSTEPS_PER_STEP, DIRECTION, MAX_SPEED);
ekasinambela 0:29fc24ce612f 81 else
ekasinambela 1:8431b042a2eb 82 stpr_mtr2.settings(1/MICROSTEPS_PER_STEP, DIRECTION, MAX_SPEED);
ekasinambela 1:8431b042a2eb 83
ekasinambela 1:8431b042a2eb 84 //if ((i - MOVEMENT) % STEP_EXTRA == 0 && !proximity_ok())
ekasinambela 1:8431b042a2eb 85 // break;
ekasinambela 0:29fc24ce612f 86 }
ekasinambela 1:8431b042a2eb 87
ekasinambela 0:29fc24ce612f 88 //de-accelerate
ekasinambela 1:8431b042a2eb 89 for (int i = MAX_SPEED; i > 0; i-=20) {
ekasinambela 0:29fc24ce612f 90 if (type == SALT)
ekasinambela 0:29fc24ce612f 91 stpr_mtr.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);
ekasinambela 0:29fc24ce612f 92 else
ekasinambela 0:29fc24ce612f 93 stpr_mtr2.settings(1/MICROSTEPS_PER_STEP, DIRECTION, i);
ekasinambela 0:29fc24ce612f 94 }
ekasinambela 0:29fc24ce612f 95
ekasinambela 0:29fc24ce612f 96 //remember previous direction
ekasinambela 1:8431b042a2eb 97 if (type == SALT){
ekasinambela 0:29fc24ce612f 98 PREVIOUS_DIRECTION_SALT = DIRECTION;
ekasinambela 1:8431b042a2eb 99 }else{
ekasinambela 0:29fc24ce612f 100 PREVIOUS_DIRECTION_PURE = DIRECTION;
ekasinambela 1:8431b042a2eb 101 }
ekasinambela 0:29fc24ce612f 102 }
ekasinambela 0:29fc24ce612f 103
ekasinambela 0:29fc24ce612f 104 int main() {
ekasinambela 1:8431b042a2eb 105
ekasinambela 0:29fc24ce612f 106 //add_water(PURE, -1, PUSH);
ekasinambela 0:29fc24ce612f 107 //add_water(SALT, -1, PUSH);
ekasinambela 0:29fc24ce612f 108
ekasinambela 1:8431b042a2eb 109 //if(proximity_ok()){
ekasinambela 1:8431b042a2eb 110 //add_water(SALT, 1, PULL);
ekasinambela 1:8431b042a2eb 111 //lcd.printf(" GO");
ekasinambela 1:8431b042a2eb 112 //add_water(SALT, 2, PUSH);
ekasinambela 1:8431b042a2eb 113 add_water(PURE, 2.0, PUSH);
ekasinambela 1:8431b042a2eb 114 wait(2);
ekasinambela 1:8431b042a2eb 115 add_water(PURE, 2.0, PULL);
ekasinambela 1:8431b042a2eb 116 wait(2);
ekasinambela 1:8431b042a2eb 117 add_water(PURE, 2.0, PUSH);
ekasinambela 1:8431b042a2eb 118 wait(2);
ekasinambela 1:8431b042a2eb 119 add_water(PURE, 2.0, PULL);
ekasinambela 1:8431b042a2eb 120 wait(2);
ekasinambela 1:8431b042a2eb 121 add_water(PURE, 2.0, PUSH);
ekasinambela 1:8431b042a2eb 122 wait(2);
ekasinambela 1:8431b042a2eb 123 add_water(PURE, 2.0, PULL);
ekasinambela 1:8431b042a2eb 124 //add_water(SALT, 2, PULL);
ekasinambela 1:8431b042a2eb 125 /*
ekasinambela 1:8431b042a2eb 126 wait(2);
ekasinambela 1:8431b042a2eb 127 add_water(SALT, 1, PULL);
ekasinambela 1:8431b042a2eb 128 wait(2);
ekasinambela 1:8431b042a2eb 129 add_water(SALT, 2, PUSH);
ekasinambela 1:8431b042a2eb 130 wait(2);
ekasinambela 1:8431b042a2eb 131 add_water(SALT, 3, PULL);
ekasinambela 1:8431b042a2eb 132 //add_water(PURE, 1, PUSH);
ekasinambela 1:8431b042a2eb 133 //wait(2);
ekasinambela 1:8431b042a2eb 134 */
ekasinambela 1:8431b042a2eb 135 //}
ekasinambela 0:29fc24ce612f 136
ekasinambela 1:8431b042a2eb 137 /*
ekasinambela 1:8431b042a2eb 138 //add_water(SALT, 2, PULL);
ekasinambela 1:8431b042a2eb 139 if(proximity_ok()){
ekasinambela 1:8431b042a2eb 140 add_water(SALT, 2, PUSH);
ekasinambela 1:8431b042a2eb 141 wait(2);
ekasinambela 1:8431b042a2eb 142 }
ekasinambela 1:8431b042a2eb 143 //add_water(SALT, 3, PULL);
ekasinambela 1:8431b042a2eb 144 if(proximity_ok()){
ekasinambela 1:8431b042a2eb 145 add_water(SALT, 3, PUSH);
ekasinambela 1:8431b042a2eb 146 wait(2);
ekasinambela 1:8431b042a2eb 147 }
ekasinambela 1:8431b042a2eb 148
ekasinambela 1:8431b042a2eb 149 add_water(SALT, 2, PUSH);
ekasinambela 1:8431b042a2eb 150
ekasinambela 1:8431b042a2eb 151 //add_water(PURE, 1, PULL);
ekasinambela 1:8431b042a2eb 152 //add_water(PURE, 1, PUSH);
ekasinambela 1:8431b042a2eb 153 //add_water(PURE, 2, PULL);
ekasinambela 1:8431b042a2eb 154 //add_water(PURE, 2, PUSH);
ekasinambela 1:8431b042a2eb 155 //add_water(PURE, 3, PULL);
ekasinambela 1:8431b042a2eb 156 //add_water(PURE, 3, PUSH);
ekasinambela 1:8431b042a2eb 157
ekasinambela 1:8431b042a2eb 158 */
ekasinambela 1:8431b042a2eb 159
ekasinambela 0:29fc24ce612f 160 }