VAM

Dependencies:   Stepper mbed HCSR04 millis

Committer:
rschimpf78
Date:
Fri Sep 14 19:10:45 2018 +0000
Revision:
2:e8f8095464cf
Parent:
0:88834eed3de0
Child:
3:fd2ca631ab44
code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rschimpf78 2:e8f8095464cf 1 #include "mbed.h"
rschimpf78 2:e8f8095464cf 2 #include "Stepper.h"
rschimpf78 2:e8f8095464cf 3 #include "string"
rschimpf78 2:e8f8095464cf 4 DigitalOut in1(D10);///in1 d9 and in2 d10
rschimpf78 2:e8f8095464cf 5 DigitalOut in2(D9);
rschimpf78 2:e8f8095464cf 6 DigitalIn endSwitch(D6);
rschimpf78 2:e8f8095464cf 7 DigitalIn homeSwitch(D7);
rschimpf78 2:e8f8095464cf 8 DigitalIn bottomSwitch(D5);
rschimpf78 2:e8f8095464cf 9 Stepper mot(D3,D4); //(D5 to PUL+, D4 to DIR+)
rschimpf78 2:e8f8095464cf 10 DigitalOut en(D2);
rschimpf78 0:88834eed3de0 11
rschimpf78 0:88834eed3de0 12 Serial pc(USBTX, USBRX);
rschimpf78 0:88834eed3de0 13
rschimpf78 2:e8f8095464cf 14 volatile int plates = 1;
rschimpf78 2:e8f8095464cf 15
rschimpf78 2:e8f8095464cf 16 void position()
rschimpf78 0:88834eed3de0 17 {
rschimpf78 2:e8f8095464cf 18 char str1[20];
rschimpf78 2:e8f8095464cf 19 char str2[20];
rschimpf78 2:e8f8095464cf 20 char str3[20];
rschimpf78 2:e8f8095464cf 21 strcpy(str1,"HOME");
rschimpf78 2:e8f8095464cf 22 strcpy(str2,"ERROR");
rschimpf78 2:e8f8095464cf 23 strcpy(str3,"IN BEAM PATH");
rschimpf78 2:e8f8095464cf 24
rschimpf78 2:e8f8095464cf 25 if(homeSwitch==0 && endSwitch==1)
rschimpf78 2:e8f8095464cf 26 {
rschimpf78 2:e8f8095464cf 27 pc.printf(" pmma state - %s\n",str1);
rschimpf78 2:e8f8095464cf 28 }
rschimpf78 2:e8f8095464cf 29 else if (homeSwitch==1 && endSwitch==0)
rschimpf78 2:e8f8095464cf 30 {
rschimpf78 2:e8f8095464cf 31 pc.printf(" pmma state - %s\n",str3);
rschimpf78 2:e8f8095464cf 32 }
rschimpf78 2:e8f8095464cf 33 else if (homeSwitch==1 && endSwitch==1)
rschimpf78 2:e8f8095464cf 34 {
rschimpf78 2:e8f8095464cf 35 pc.printf(" pmma state - %s\n",str2);
rschimpf78 2:e8f8095464cf 36 }
rschimpf78 2:e8f8095464cf 37 else
rschimpf78 2:e8f8095464cf 38 {
rschimpf78 2:e8f8095464cf 39 pc.printf(" pmma state - else");
rschimpf78 2:e8f8095464cf 40 }
rschimpf78 2:e8f8095464cf 41 }
rschimpf78 0:88834eed3de0 42 void retractPMMA()
rschimpf78 0:88834eed3de0 43 {
rschimpf78 2:e8f8095464cf 44 while(homeSwitch == 1)
rschimpf78 2:e8f8095464cf 45 {
rschimpf78 0:88834eed3de0 46 in1=1;
rschimpf78 0:88834eed3de0 47 in2=0;
rschimpf78 2:e8f8095464cf 48 }
rschimpf78 2:e8f8095464cf 49 in1=1;
rschimpf78 2:e8f8095464cf 50 in2=1;
rschimpf78 2:e8f8095464cf 51 }
rschimpf78 2:e8f8095464cf 52 void sendPMMA() //Command: Send plates
rschimpf78 2:e8f8095464cf 53 {
rschimpf78 2:e8f8095464cf 54
rschimpf78 0:88834eed3de0 55 in1=0;
rschimpf78 2:e8f8095464cf 56 in2=1;
rschimpf78 2:e8f8095464cf 57 wait(9);
rschimpf78 2:e8f8095464cf 58 in1=1;
rschimpf78 2:e8f8095464cf 59 in2=1;
rschimpf78 0:88834eed3de0 60 }
rschimpf78 0:88834eed3de0 61
rschimpf78 2:e8f8095464cf 62 void autoCalibrate() //if machine is plugged in when the plate selector isn't at the origin...
rschimpf78 2:e8f8095464cf 63 {
rschimpf78 2:e8f8095464cf 64 while(homeSwitch==1)
rschimpf78 2:e8f8095464cf 65 {
rschimpf78 2:e8f8095464cf 66 retractPMMA();
rschimpf78 2:e8f8095464cf 67 }
rschimpf78 2:e8f8095464cf 68
rschimpf78 0:88834eed3de0 69 in1=1;
rschimpf78 2:e8f8095464cf 70 in2=1;
rschimpf78 2:e8f8095464cf 71 en = 0; //...it automatically lowers it to the origin position
rschimpf78 2:e8f8095464cf 72 mot.setSpeed(600);
rschimpf78 2:e8f8095464cf 73 mot.rotate(1);
rschimpf78 2:e8f8095464cf 74 while(bottomSwitch); //While bottom switch is unpressed
rschimpf78 2:e8f8095464cf 75 mot.stop(); //Stop rotation when switch is pressed (pressed = logical level low) //Disable driver
rschimpf78 2:e8f8095464cf 76 mot.setPositionZero();
rschimpf78 2:e8f8095464cf 77 wait(1);
rschimpf78 2:e8f8095464cf 78 mot.goesTo(-800);
rschimpf78 2:e8f8095464cf 79 while(!mot.stopped());
rschimpf78 2:e8f8095464cf 80 mot.stop();
rschimpf78 2:e8f8095464cf 81 mot.setPositionZero();
rschimpf78 2:e8f8095464cf 82 en=1; //Set absolute origin for plate selector at switch hit
rschimpf78 0:88834eed3de0 83 }
rschimpf78 0:88834eed3de0 84 void internalpullups()
rschimpf78 0:88834eed3de0 85 {
rschimpf78 2:e8f8095464cf 86 bottomSwitch.mode(PullUp);
rschimpf78 2:e8f8095464cf 87 homeSwitch.mode(PullUp);
rschimpf78 2:e8f8095464cf 88 endSwitch.mode(PullUp);
rschimpf78 0:88834eed3de0 89 wait (.01);
rschimpf78 0:88834eed3de0 90 }
rschimpf78 2:e8f8095464cf 91 void numberofPlates() // Command: Number of PMMA to send (plates)
rschimpf78 2:e8f8095464cf 92 {
rschimpf78 2:e8f8095464cf 93 int stepheight;
rschimpf78 2:e8f8095464cf 94
rschimpf78 2:e8f8095464cf 95 if (plates <= 0 || plates >= 17)
rschimpf78 2:e8f8095464cf 96 {
rschimpf78 2:e8f8095464cf 97 pc.printf(" ERROR invalid range |");
rschimpf78 2:e8f8095464cf 98 }
rschimpf78 2:e8f8095464cf 99 else if(endSwitch == 1 && homeSwitch==0)
rschimpf78 2:e8f8095464cf 100 {
rschimpf78 2:e8f8095464cf 101 en = 0;
rschimpf78 2:e8f8095464cf 102 mot.goesTo((plates-1)*-1680); //plates per step
rschimpf78 2:e8f8095464cf 103 while(!mot.stopped());
rschimpf78 2:e8f8095464cf 104 stepheight = mot.getPosition();
rschimpf78 2:e8f8095464cf 105 pc.printf(" selector height %d steps |",stepheight);
rschimpf78 2:e8f8095464cf 106 mot.stop();
rschimpf78 2:e8f8095464cf 107 en = 1;
rschimpf78 2:e8f8095464cf 108 wait(1);
rschimpf78 2:e8f8095464cf 109 sendPMMA();
rschimpf78 0:88834eed3de0 110 }
rschimpf78 2:e8f8095464cf 111 else
rschimpf78 2:e8f8095464cf 112 {
rschimpf78 2:e8f8095464cf 113 pc.printf("Position Error - Cannot Send");
rschimpf78 2:e8f8095464cf 114 }
rschimpf78 2:e8f8095464cf 115 }
rschimpf78 0:88834eed3de0 116 void selectionStatus()
rschimpf78 0:88834eed3de0 117 {
rschimpf78 2:e8f8095464cf 118 int stepperposition;
rschimpf78 2:e8f8095464cf 119 double selectedplates;
rschimpf78 2:e8f8095464cf 120 stepperposition = mot.getPosition();
rschimpf78 2:e8f8095464cf 121 selectedplates = stepperposition/1621;
rschimpf78 2:e8f8095464cf 122 pc.printf("\n Number of plates currently selected: %d ",selectedplates);
rschimpf78 2:e8f8095464cf 123 }
rschimpf78 2:e8f8095464cf 124 void deviceinfo()
rschimpf78 2:e8f8095464cf 125 {
rschimpf78 2:e8f8095464cf 126 printf("\nUnique ID: 0240000041114e4500513007bcf9000a9e51000097969900");
rschimpf78 2:e8f8095464cf 127 printf("\nBootloader Version: 0244");
rschimpf78 2:e8f8095464cf 128 printf("\nBUILD: 1:4BDA04E+");
rschimpf78 2:e8f8095464cf 129 printf("\nBUILD TIMESTAMP=3/18/2018\n\n");
rschimpf78 2:e8f8095464cf 130
rschimpf78 2:e8f8095464cf 131 }
rschimpf78 0:88834eed3de0 132
rschimpf78 0:88834eed3de0 133 int main()
rschimpf78 2:e8f8095464cf 134 {
rschimpf78 2:e8f8095464cf 135 in1=1;
rschimpf78 2:e8f8095464cf 136 in2=1;
rschimpf78 2:e8f8095464cf 137 en = 1;
rschimpf78 2:e8f8095464cf 138 wait(0.1);
rschimpf78 0:88834eed3de0 139 internalpullups();
rschimpf78 2:e8f8095464cf 140 wait(0.1);
rschimpf78 2:e8f8095464cf 141 autoCalibrate();
rschimpf78 2:e8f8095464cf 142
rschimpf78 2:e8f8095464cf 143 char command[15] = {0};
rschimpf78 2:e8f8095464cf 144 pc.printf("\nCommands:\n\n\tsend [N]\t**places N PMMA sheets in beam path\n\tretract\t\t**removes all PMMA from beam path\n\tlocation\t**returns location of PMMA\n\tinfo\t\t**returns device and firmware information\n\n");
rschimpf78 2:e8f8095464cf 145
rschimpf78 2:e8f8095464cf 146 while(1)
rschimpf78 0:88834eed3de0 147 {
rschimpf78 2:e8f8095464cf 148
rschimpf78 2:e8f8095464cf 149 pc.printf("\nRequests: ");
rschimpf78 2:e8f8095464cf 150 pc.scanf("%s",&command);
rschimpf78 2:e8f8095464cf 151
rschimpf78 2:e8f8095464cf 152 if (strcmp (command, "send") == 0)
rschimpf78 2:e8f8095464cf 153 {
rschimpf78 2:e8f8095464cf 154 pc.scanf(" %d",&plates);
rschimpf78 2:e8f8095464cf 155 pc.printf("\nresponse recieved |");
rschimpf78 2:e8f8095464cf 156 numberofPlates();
rschimpf78 2:e8f8095464cf 157 position();
rschimpf78 0:88834eed3de0 158 }
rschimpf78 2:e8f8095464cf 159 else if (strcmp (command, "retract") == 0)
rschimpf78 2:e8f8095464cf 160 {
rschimpf78 2:e8f8095464cf 161 pc.printf("\nresponse recieved |");
rschimpf78 2:e8f8095464cf 162 retractPMMA();
rschimpf78 2:e8f8095464cf 163 position();
rschimpf78 0:88834eed3de0 164 }
rschimpf78 2:e8f8095464cf 165 else if (strcmp (command, "location") == 0)
rschimpf78 0:88834eed3de0 166 {
rschimpf78 2:e8f8095464cf 167 pc.printf("\nresponse recieved |");
rschimpf78 2:e8f8095464cf 168 position();
rschimpf78 2:e8f8095464cf 169 }
rschimpf78 2:e8f8095464cf 170 else if (strcmp (command, "info") == 0)
rschimpf78 2:e8f8095464cf 171 {
rschimpf78 2:e8f8095464cf 172 pc.printf("\nresponse recieved |");
rschimpf78 2:e8f8095464cf 173 deviceinfo();
rschimpf78 0:88834eed3de0 174 }
rschimpf78 2:e8f8095464cf 175 else if (strcmp (command, "height") == 0)
rschimpf78 2:e8f8095464cf 176 {
rschimpf78 2:e8f8095464cf 177 pc.printf("\nresponse recieved |");
rschimpf78 2:e8f8095464cf 178 numberofPlates();
rschimpf78 0:88834eed3de0 179 }
rschimpf78 2:e8f8095464cf 180
rschimpf78 2:e8f8095464cf 181 else
rschimpf78 2:e8f8095464cf 182 {
rschimpf78 2:e8f8095464cf 183 pc.printf("\nERROR-command invalid");
rschimpf78 2:e8f8095464cf 184 }
rschimpf78 0:88834eed3de0 185 }
rschimpf78 2:e8f8095464cf 186 }