VAM
Dependencies: Stepper mbed HCSR04 millis
main.cpp
- Committer:
- rschimpf78
- Date:
- 2018-09-14
- Revision:
- 2:e8f8095464cf
- Parent:
- 0:88834eed3de0
- Child:
- 3:fd2ca631ab44
File content as of revision 2:e8f8095464cf:
#include "mbed.h" #include "Stepper.h" #include "string" DigitalOut in1(D10);///in1 d9 and in2 d10 DigitalOut in2(D9); DigitalIn endSwitch(D6); DigitalIn homeSwitch(D7); DigitalIn bottomSwitch(D5); Stepper mot(D3,D4); //(D5 to PUL+, D4 to DIR+) DigitalOut en(D2); Serial pc(USBTX, USBRX); volatile int plates = 1; void position() { char str1[20]; char str2[20]; char str3[20]; strcpy(str1,"HOME"); strcpy(str2,"ERROR"); strcpy(str3,"IN BEAM PATH"); if(homeSwitch==0 && endSwitch==1) { pc.printf(" pmma state - %s\n",str1); } else if (homeSwitch==1 && endSwitch==0) { pc.printf(" pmma state - %s\n",str3); } else if (homeSwitch==1 && endSwitch==1) { pc.printf(" pmma state - %s\n",str2); } else { pc.printf(" pmma state - else"); } } void retractPMMA() { while(homeSwitch == 1) { in1=1; in2=0; } in1=1; in2=1; } void sendPMMA() //Command: Send plates { in1=0; in2=1; wait(9); in1=1; in2=1; } void autoCalibrate() //if machine is plugged in when the plate selector isn't at the origin... { while(homeSwitch==1) { retractPMMA(); } in1=1; in2=1; en = 0; //...it automatically lowers it to the origin position mot.setSpeed(600); mot.rotate(1); while(bottomSwitch); //While bottom switch is unpressed mot.stop(); //Stop rotation when switch is pressed (pressed = logical level low) //Disable driver mot.setPositionZero(); wait(1); mot.goesTo(-800); while(!mot.stopped()); mot.stop(); mot.setPositionZero(); en=1; //Set absolute origin for plate selector at switch hit } void internalpullups() { bottomSwitch.mode(PullUp); homeSwitch.mode(PullUp); endSwitch.mode(PullUp); wait (.01); } void numberofPlates() // Command: Number of PMMA to send (plates) { int stepheight; if (plates <= 0 || plates >= 17) { pc.printf(" ERROR invalid range |"); } else if(endSwitch == 1 && homeSwitch==0) { en = 0; mot.goesTo((plates-1)*-1680); //plates per step while(!mot.stopped()); stepheight = mot.getPosition(); pc.printf(" selector height %d steps |",stepheight); mot.stop(); en = 1; wait(1); sendPMMA(); } else { pc.printf("Position Error - Cannot Send"); } } void selectionStatus() { int stepperposition; double selectedplates; stepperposition = mot.getPosition(); selectedplates = stepperposition/1621; pc.printf("\n Number of plates currently selected: %d ",selectedplates); } void deviceinfo() { printf("\nUnique ID: 0240000041114e4500513007bcf9000a9e51000097969900"); printf("\nBootloader Version: 0244"); printf("\nBUILD: 1:4BDA04E+"); printf("\nBUILD TIMESTAMP=3/18/2018\n\n"); } int main() { in1=1; in2=1; en = 1; wait(0.1); internalpullups(); wait(0.1); autoCalibrate(); char command[15] = {0}; 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"); while(1) { pc.printf("\nRequests: "); pc.scanf("%s",&command); if (strcmp (command, "send") == 0) { pc.scanf(" %d",&plates); pc.printf("\nresponse recieved |"); numberofPlates(); position(); } else if (strcmp (command, "retract") == 0) { pc.printf("\nresponse recieved |"); retractPMMA(); position(); } else if (strcmp (command, "location") == 0) { pc.printf("\nresponse recieved |"); position(); } else if (strcmp (command, "info") == 0) { pc.printf("\nresponse recieved |"); deviceinfo(); } else if (strcmp (command, "height") == 0) { pc.printf("\nresponse recieved |"); numberofPlates(); } else { pc.printf("\nERROR-command invalid"); } } }