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.
main.cpp@1:8431b042a2eb, 2016-06-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |