for cycle testing

Dependencies:   HCSR04 PinDetect Stepper

Committer:
rschimpf78
Date:
Sat Oct 13 02:26:02 2018 +0000
Revision:
0:5848e605bae5
no change;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rschimpf78 0:5848e605bae5 1 #include "mbed.h"
rschimpf78 0:5848e605bae5 2 #include "Stepper.h"
rschimpf78 0:5848e605bae5 3 #include "string"
rschimpf78 0:5848e605bae5 4 #include "hcsr04.h"
rschimpf78 0:5848e605bae5 5 Serial pc(USBTX, USBRX);
rschimpf78 0:5848e605bae5 6 HCSR04 heightsensor(PTA2,PTC2); //(trig,echo)
rschimpf78 0:5848e605bae5 7 HCSR04 pathsensor(PTD3,PTD2);
rschimpf78 0:5848e605bae5 8 DigitalOut in1(PTC12);
rschimpf78 0:5848e605bae5 9 DigitalOut in2(D7);
rschimpf78 0:5848e605bae5 10 DigitalIn homeSwitch(D9);
rschimpf78 0:5848e605bae5 11 Stepper mot(D3,D4); //(D3 to PUL+, D4 to DIR+)
rschimpf78 0:5848e605bae5 12 DigitalOut en(D2);
rschimpf78 0:5848e605bae5 13
rschimpf78 0:5848e605bae5 14 volatile int plates=0;
rschimpf78 0:5848e605bae5 15 volatile unsigned int sheets=0;
rschimpf78 0:5848e605bae5 16 volatile unsigned int path_sheets=0;
rschimpf78 0:5848e605bae5 17
rschimpf78 0:5848e605bae5 18 void plate_selection()
rschimpf78 0:5848e605bae5 19 {
rschimpf78 0:5848e605bae5 20 unsigned int dist;
rschimpf78 0:5848e605bae5 21 int er = 5;
rschimpf78 0:5848e605bae5 22 int fp = 470; //adjust if needed
rschimpf78 0:5848e605bae5 23 int lp = 75; //adjust if needed
rschimpf78 0:5848e605bae5 24 int tp = 26;
rschimpf78 0:5848e605bae5 25
rschimpf78 0:5848e605bae5 26 while (plates!=sheets) {
rschimpf78 0:5848e605bae5 27 heightsensor.start();
rschimpf78 0:5848e605bae5 28 wait_ms(500);
rschimpf78 0:5848e605bae5 29 dist=heightsensor.get_dist_cm();
rschimpf78 0:5848e605bae5 30 pc.printf("\nmm:%ld",dist);
rschimpf78 0:5848e605bae5 31
rschimpf78 0:5848e605bae5 32 if (dist<=lp-10 || dist >= fp+10){
rschimpf78 0:5848e605bae5 33 mot.stop();
rschimpf78 0:5848e605bae5 34 en = 1;
rschimpf78 0:5848e605bae5 35 sheets = plates;
rschimpf78 0:5848e605bae5 36 pc.printf("\nERROR: Selector is outside of plate range\nRestart/Reset Program");
rschimpf78 0:5848e605bae5 37 }
rschimpf78 0:5848e605bae5 38 else if (plates<sheets){
rschimpf78 0:5848e605bae5 39 en = 0;
rschimpf78 0:5848e605bae5 40 mot.setSpeed(600);
rschimpf78 0:5848e605bae5 41 mot.rotate(1);
rschimpf78 0:5848e605bae5 42 }
rschimpf78 0:5848e605bae5 43 else{
rschimpf78 0:5848e605bae5 44 en = 0;
rschimpf78 0:5848e605bae5 45 mot.setSpeed(600);
rschimpf78 0:5848e605bae5 46 mot.rotate(0);
rschimpf78 0:5848e605bae5 47 }
rschimpf78 0:5848e605bae5 48
rschimpf78 0:5848e605bae5 49 if (dist<=fp+er && dist>=fp-er){
rschimpf78 0:5848e605bae5 50 sheets = 1;
rschimpf78 0:5848e605bae5 51 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 52 }
rschimpf78 0:5848e605bae5 53
rschimpf78 0:5848e605bae5 54 if (dist<= fp-tp-er && dist>=fp-tp-er){
rschimpf78 0:5848e605bae5 55 sheets = 2;
rschimpf78 0:5848e605bae5 56 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 57 }
rschimpf78 0:5848e605bae5 58
rschimpf78 0:5848e605bae5 59 if (dist<= fp-2*tp-er && dist>=fp-2*tp-er){
rschimpf78 0:5848e605bae5 60 sheets = 3;
rschimpf78 0:5848e605bae5 61 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 62 }
rschimpf78 0:5848e605bae5 63
rschimpf78 0:5848e605bae5 64 if (dist<= fp-3*tp-er && dist>=fp-3*tp-er){
rschimpf78 0:5848e605bae5 65 sheets = 4;
rschimpf78 0:5848e605bae5 66 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 67 }
rschimpf78 0:5848e605bae5 68 if (dist<= fp-4*tp-er && dist>=fp-4*tp-er){
rschimpf78 0:5848e605bae5 69 sheets = 5;
rschimpf78 0:5848e605bae5 70 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 71 }
rschimpf78 0:5848e605bae5 72 if (dist<= fp-5*tp-er && dist>=fp-5*tp-er){
rschimpf78 0:5848e605bae5 73 sheets = 6;
rschimpf78 0:5848e605bae5 74 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 75 }
rschimpf78 0:5848e605bae5 76 if (dist<= fp-6*tp-er && dist>=fp-6*tp-er){
rschimpf78 0:5848e605bae5 77 sheets = 7;
rschimpf78 0:5848e605bae5 78 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 79 }
rschimpf78 0:5848e605bae5 80 if (dist<= fp-7*tp-er && dist>=fp-7*tp-er){
rschimpf78 0:5848e605bae5 81 sheets = 8;
rschimpf78 0:5848e605bae5 82 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 83 }
rschimpf78 0:5848e605bae5 84 if (dist<= fp-8*tp-er && dist>=fp-8*tp-er){
rschimpf78 0:5848e605bae5 85 sheets = 9;
rschimpf78 0:5848e605bae5 86 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 87 }
rschimpf78 0:5848e605bae5 88 if (dist<= fp-9*tp-er && dist>=fp-9*tp-er){
rschimpf78 0:5848e605bae5 89 sheets = 10;
rschimpf78 0:5848e605bae5 90 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 91 }
rschimpf78 0:5848e605bae5 92 if (dist<= fp-10*tp-er && dist>=fp-10*tp-er){
rschimpf78 0:5848e605bae5 93 sheets = 11;
rschimpf78 0:5848e605bae5 94 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 95 }
rschimpf78 0:5848e605bae5 96 if (dist<= fp-11*tp-er && dist>=fp-11*tp-er){
rschimpf78 0:5848e605bae5 97 sheets = 12;
rschimpf78 0:5848e605bae5 98 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 99 }
rschimpf78 0:5848e605bae5 100 if (dist<= fp-12*tp-er && dist>=fp-12*tp-er){
rschimpf78 0:5848e605bae5 101 sheets = 13;
rschimpf78 0:5848e605bae5 102 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 103 }
rschimpf78 0:5848e605bae5 104 if (dist<= fp-13*tp-er && dist>=fp-13*tp-er){
rschimpf78 0:5848e605bae5 105 sheets = 14;
rschimpf78 0:5848e605bae5 106 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 107 }
rschimpf78 0:5848e605bae5 108 if (dist<= fp-14*tp-er && dist>=fp-14*tp-er){
rschimpf78 0:5848e605bae5 109 sheets = 15;
rschimpf78 0:5848e605bae5 110 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 111 }
rschimpf78 0:5848e605bae5 112 if (dist<= fp-15*tp-er && dist>=fp-15*tp-er){
rschimpf78 0:5848e605bae5 113 sheets = 16;
rschimpf78 0:5848e605bae5 114 pc.printf("\nSheets selected:%ld",sheets);
rschimpf78 0:5848e605bae5 115 }
rschimpf78 0:5848e605bae5 116 }
rschimpf78 0:5848e605bae5 117 mot.stop();
rschimpf78 0:5848e605bae5 118 en = 1;
rschimpf78 0:5848e605bae5 119 wait(1);
rschimpf78 0:5848e605bae5 120 }
rschimpf78 0:5848e605bae5 121
rschimpf78 0:5848e605bae5 122 void beam()
rschimpf78 0:5848e605bae5 123 {
rschimpf78 0:5848e605bae5 124
rschimpf78 0:5848e605bae5 125 unsigned int path_dist;
rschimpf78 0:5848e605bae5 126 int err = 5;
rschimpf78 0:5848e605bae5 127 int sens_pos = 133; //adjust if needed
rschimpf78 0:5848e605bae5 128 int sheet_th = 26;
rschimpf78 0:5848e605bae5 129 pathsensor.start();
rschimpf78 0:5848e605bae5 130 wait_ms(500);
rschimpf78 0:5848e605bae5 131 path_dist=pathsensor.get_dist_cm();
rschimpf78 0:5848e605bae5 132 pc.printf("\nmm:%ld",path_dist);
rschimpf78 0:5848e605bae5 133 path_sheets = 17;
rschimpf78 0:5848e605bae5 134
rschimpf78 0:5848e605bae5 135 if (path_dist >= sens_pos-err && path_dist <= sens_pos+err){ //127-139
rschimpf78 0:5848e605bae5 136 path_sheets = 16;
rschimpf78 0:5848e605bae5 137
rschimpf78 0:5848e605bae5 138 }
rschimpf78 0:5848e605bae5 139 if (path_dist >= sens_pos-err+sheet_th && path_dist <= sens_pos+err+sheet_th){ // 153-165
rschimpf78 0:5848e605bae5 140 path_sheets = 15;
rschimpf78 0:5848e605bae5 141
rschimpf78 0:5848e605bae5 142 }
rschimpf78 0:5848e605bae5 143 if (path_dist >= sens_pos-err+2*sheet_th && path_dist <= sens_pos+err+2*sheet_th){ //179-191
rschimpf78 0:5848e605bae5 144 path_sheets = 14;
rschimpf78 0:5848e605bae5 145
rschimpf78 0:5848e605bae5 146 }
rschimpf78 0:5848e605bae5 147 if (path_dist >= sens_pos-err+3*sheet_th && path_dist <= sens_pos+err+3*sheet_th){ //205-217
rschimpf78 0:5848e605bae5 148 path_sheets = 13;
rschimpf78 0:5848e605bae5 149
rschimpf78 0:5848e605bae5 150 }
rschimpf78 0:5848e605bae5 151 if (path_dist >= sens_pos-err+4*sheet_th && path_dist <= sens_pos+err+4*sheet_th){ //231-243
rschimpf78 0:5848e605bae5 152 path_sheets = 12;
rschimpf78 0:5848e605bae5 153
rschimpf78 0:5848e605bae5 154 }
rschimpf78 0:5848e605bae5 155 if (path_dist >= sens_pos-err+5*sheet_th && path_dist <= sens_pos+err+5*sheet_th){ //257-269
rschimpf78 0:5848e605bae5 156 path_sheets = 11;
rschimpf78 0:5848e605bae5 157
rschimpf78 0:5848e605bae5 158 }
rschimpf78 0:5848e605bae5 159 if (path_dist >= sens_pos-err+6*sheet_th && path_dist <= sens_pos+err+6*sheet_th){ //283-295
rschimpf78 0:5848e605bae5 160 path_sheets = 10;
rschimpf78 0:5848e605bae5 161
rschimpf78 0:5848e605bae5 162 }
rschimpf78 0:5848e605bae5 163 if (path_dist >= sens_pos-err+7*sheet_th && path_dist <= sens_pos+err+7*sheet_th){ //309-321
rschimpf78 0:5848e605bae5 164 path_sheets = 9;
rschimpf78 0:5848e605bae5 165
rschimpf78 0:5848e605bae5 166 }
rschimpf78 0:5848e605bae5 167 if (path_dist >= sens_pos-err+8*sheet_th && path_dist <= sens_pos+err+8*sheet_th){ //323-333
rschimpf78 0:5848e605bae5 168 path_sheets = 8;
rschimpf78 0:5848e605bae5 169
rschimpf78 0:5848e605bae5 170 }
rschimpf78 0:5848e605bae5 171 if (path_dist >= sens_pos-err+9*sheet_th && path_dist <= sens_pos+err+9*sheet_th){ //349-359
rschimpf78 0:5848e605bae5 172 path_sheets = 7;
rschimpf78 0:5848e605bae5 173
rschimpf78 0:5848e605bae5 174 }
rschimpf78 0:5848e605bae5 175 if (path_dist >= sens_pos-err+10*sheet_th && path_dist <= sens_pos+err+10*sheet_th){
rschimpf78 0:5848e605bae5 176 path_sheets = 6;
rschimpf78 0:5848e605bae5 177
rschimpf78 0:5848e605bae5 178 }
rschimpf78 0:5848e605bae5 179 if (path_dist >= sens_pos-err+11*sheet_th && path_dist <= sens_pos+err+11*sheet_th){
rschimpf78 0:5848e605bae5 180 path_sheets = 5;
rschimpf78 0:5848e605bae5 181
rschimpf78 0:5848e605bae5 182 }
rschimpf78 0:5848e605bae5 183 if (path_dist >= sens_pos-err+12*sheet_th && path_dist <= sens_pos+err+12*sheet_th){
rschimpf78 0:5848e605bae5 184 path_sheets = 4;
rschimpf78 0:5848e605bae5 185
rschimpf78 0:5848e605bae5 186 }
rschimpf78 0:5848e605bae5 187 if (path_dist >= sens_pos-err+13*sheet_th && path_dist <= sens_pos+err+13*sheet_th){ //465-477
rschimpf78 0:5848e605bae5 188 path_sheets = 3;
rschimpf78 0:5848e605bae5 189
rschimpf78 0:5848e605bae5 190 }
rschimpf78 0:5848e605bae5 191 if (path_dist >= sens_pos-err+14*sheet_th && path_dist <= sens_pos+err+14*sheet_th){
rschimpf78 0:5848e605bae5 192 path_sheets = 2;
rschimpf78 0:5848e605bae5 193
rschimpf78 0:5848e605bae5 194 }
rschimpf78 0:5848e605bae5 195 if (path_dist >= sens_pos-err+15*sheet_th && path_dist <= sens_pos+err+15*sheet_th){
rschimpf78 0:5848e605bae5 196 path_sheets = 1;
rschimpf78 0:5848e605bae5 197
rschimpf78 0:5848e605bae5 198 }
rschimpf78 0:5848e605bae5 199 if (path_dist > sens_pos-err+16*sheet_th){
rschimpf78 0:5848e605bae5 200 path_sheets = 0;
rschimpf78 0:5848e605bae5 201 }
rschimpf78 0:5848e605bae5 202 }
rschimpf78 0:5848e605bae5 203 void platedetect()
rschimpf78 0:5848e605bae5 204 {
rschimpf78 0:5848e605bae5 205 if(homeSwitch==0 && path_sheets==0)
rschimpf78 0:5848e605bae5 206 {
rschimpf78 0:5848e605bae5 207 pc.printf("\nAll plates are in the start position");
rschimpf78 0:5848e605bae5 208 }
rschimpf78 0:5848e605bae5 209 else if (homeSwitch==1 && path_sheets==0)
rschimpf78 0:5848e605bae5 210 {
rschimpf78 0:5848e605bae5 211 pc.printf("\nError-Plates are not fully extended");
rschimpf78 0:5848e605bae5 212 }
rschimpf78 0:5848e605bae5 213 else
rschimpf78 0:5848e605bae5 214 {
rschimpf78 0:5848e605bae5 215 if (plates==path_sheets)
rschimpf78 0:5848e605bae5 216 {
rschimpf78 0:5848e605bae5 217 pc.printf("\nPlates in beam path:%ld",path_sheets);
rschimpf78 0:5848e605bae5 218 }
rschimpf78 0:5848e605bae5 219 else if (plates != path_sheets && path_sheets <= 16)
rschimpf78 0:5848e605bae5 220 {
rschimpf78 0:5848e605bae5 221 pc.printf("\nError: %ld",path_sheets);
rschimpf78 0:5848e605bae5 222 pc.printf(" Plates in beam path, but user sent %ld",plates);
rschimpf78 0:5848e605bae5 223 pc.printf(" Plates");
rschimpf78 0:5848e605bae5 224 }
rschimpf78 0:5848e605bae5 225 else{
rschimpf78 0:5848e605bae5 226 pc.printf("\nERROR: Additional objects detected in beam path");
rschimpf78 0:5848e605bae5 227 }
rschimpf78 0:5848e605bae5 228 }
rschimpf78 0:5848e605bae5 229 }
rschimpf78 0:5848e605bae5 230 void retract()
rschimpf78 0:5848e605bae5 231 {
rschimpf78 0:5848e605bae5 232 while(homeSwitch == 1)
rschimpf78 0:5848e605bae5 233 {
rschimpf78 0:5848e605bae5 234 in1=0;
rschimpf78 0:5848e605bae5 235 in2=1;
rschimpf78 0:5848e605bae5 236 }
rschimpf78 0:5848e605bae5 237 in1=1;
rschimpf78 0:5848e605bae5 238 in2=1;
rschimpf78 0:5848e605bae5 239 }
rschimpf78 0:5848e605bae5 240
rschimpf78 0:5848e605bae5 241 void send()
rschimpf78 0:5848e605bae5 242 {
rschimpf78 0:5848e605bae5 243 in1=1;
rschimpf78 0:5848e605bae5 244 in2=0;
rschimpf78 0:5848e605bae5 245 wait(17);
rschimpf78 0:5848e605bae5 246 in1=1;
rschimpf78 0:5848e605bae5 247 in2=1;
rschimpf78 0:5848e605bae5 248 }
rschimpf78 0:5848e605bae5 249 void internalpullups()
rschimpf78 0:5848e605bae5 250 {
rschimpf78 0:5848e605bae5 251 homeSwitch.mode(PullUp);
rschimpf78 0:5848e605bae5 252 wait (.01);
rschimpf78 0:5848e605bae5 253 }
rschimpf78 0:5848e605bae5 254
rschimpf78 0:5848e605bae5 255 void send_error_check()
rschimpf78 0:5848e605bae5 256 {
rschimpf78 0:5848e605bae5 257 if (plates <= 0 || plates >= 17)
rschimpf78 0:5848e605bae5 258 {
rschimpf78 0:5848e605bae5 259 pc.printf("\nERROR: Invalid Range |");
rschimpf78 0:5848e605bae5 260 }
rschimpf78 0:5848e605bae5 261 else if(homeSwitch == 1)
rschimpf78 0:5848e605bae5 262 {
rschimpf78 0:5848e605bae5 263 pc.printf("\nERROR: Not at Home Position |");
rschimpf78 0:5848e605bae5 264 }
rschimpf78 0:5848e605bae5 265 else
rschimpf78 0:5848e605bae5 266 {
rschimpf78 0:5848e605bae5 267 plate_selection();
rschimpf78 0:5848e605bae5 268 send();
rschimpf78 0:5848e605bae5 269 }
rschimpf78 0:5848e605bae5 270 }
rschimpf78 0:5848e605bae5 271
rschimpf78 0:5848e605bae5 272 int main() {
rschimpf78 0:5848e605bae5 273
rschimpf78 0:5848e605bae5 274 while(1){
rschimpf78 0:5848e605bae5 275 plates = (rand() % 16) + 1;
rschimpf78 0:5848e605bae5 276 pc.printf("\nSending: ",plates);
rschimpf78 0:5848e605bae5 277 send_error_check();
rschimpf78 0:5848e605bae5 278 beam();
rschimpf78 0:5848e605bae5 279 platedetect();
rschimpf78 0:5848e605bae5 280 wait(2);
rschimpf78 0:5848e605bae5 281 retract();
rschimpf78 0:5848e605bae5 282 }
rschimpf78 0:5848e605bae5 283
rschimpf78 0:5848e605bae5 284
rschimpf78 0:5848e605bae5 285 }