Cycle Testing

Dependencies:   Stepper mbed HCSR04 millis

main.cpp

Committer:
rschimpf78
Date:
2018-03-18
Revision:
0:88834eed3de0
Child:
2:e8f8095464cf

File content as of revision 0:88834eed3de0:

/*#include "mbed.h"
#include <vector>
//--------Brushed Motor -------------------
DigitalOut in3(PTC17); 
DigitalOut in4(PTC16);
//---------Stepper Motor ------------------
Stepper mot(PTA1,D2);//d2 and d3
DigitalOut en(D4); 
Serial pc(USBTX, USBRX); 
 
//--Internal pullup resistors for Bumper Switches---
DigitalIn bswitch(D1);
DigitalIn tswitch(D0);
int main() {
    vector<int> time;
    vector<int> plates;
    int n,t,h,m,s = 0; 
    int tests = 0;
    PULp.period(0.0006f); 
    ENp = 1;
    DIRp = 0;
    PULp.write(0.5f); 
    in3=0;
    in4=0;
    pc.printf("\nCommands  ");
    pc.scanf("%d",&tests); 
    
    for (int i = 1; i<=tests;i++){
        pc.printf("\nEnter the Number of Plates for test %d: ",i);
        pc.scanf("%d",&n);
        pc.printf("\nEnter hours and minutes to test these plates\n\nHours: ");
        pc.scanf("%d",&h);
        pc.printf("Minutes: ");
        pc.scanf("%d",&m);
        pc.printf("Seconds: ");
        pc.scanf("%d",&s);
        t=(h*3600)+(m*60)+s;
        time.push_back(t);
        plates.push_back(n);
    }
    pc.printf("\nTesting in Progress...");
   for (unsigned y=0; y<time.size(); y++){
       
        //--------Turn Stepper on for a certain amount of time based on the number of plates----
        in3=0;   // stop actuator
        in4=0;   // stop actuator
        ENp = 0; 
        DIRp = 0;
        wait(1.9*(plates.at(y)-1)); 
        ENp = 1;
        wait(0.5);
        //-------Move Plates Under X ray Beam---------------------------------------------------
        in3=0;
        in4=1;
        wait(14); //reaches end after 10 seconds
        in3=0;   // stop actuator
        in4=0;   // stop actuator
        //-----Test the Plate for specified time ----------------------------------------------
        wait(time.at(y)); //Leave plates in beam path for the user inputted amount of time
        //-----Retract plates to original position---------------------------------------------
        in3=1;
        in4=0;
        wait(14); 
        in3=0; 
        in4=0; 
        wait(0.5);
        //--------Return Stepper to base height with one plate selected------------------------
        ENp = 0; 
        DIRp = 1; 
        wait(2*(plates.at(y)-1));
        ENp = 1; 
        //-------------------------------------------------------------------------------------
        pc.printf("\n\nTest number %d complete", y+1);
        pc.printf("\nNumber of Plates: %d", plates.at(y));
        pc.printf("\nLength of Test: %d seconds", time.at(y));
        }
        pc.printf("\n\nAll testing complete");
    }
*/

/*#include "mbed.h" 

Serial pc(USBTX, USBRX);
 
int main() {
    char c;
    char buffer[128];
    pc.gets(buffer, 4);
    pc.printf("I got '%s'\n", buffer);  
    if(strcmp(buffer,"on")==0) {
        printf("success");
        }   
    else{
        printf("fail");
        }   
}
*/
#include "mbed.h"
#include "Stepper.h"
DigitalIn homeSwitch(D8);
DigitalIn endSwitch(D1);
DigitalIn bottomSwitch(D0);
DigitalIn topSwitch(D9);
Stepper mot(PTA1,D2);
DigitalOut en(D4); 
DigitalOut in1(D11); 
DigitalOut in2(D10);
Serial pc(USBTX, USBRX);

void positionStatus()
{
     int plateposition;  //plate position -> 1 is home, 2 is traveling, 3 is under beam path 
     if(homeSwitch==0 && endSwitch==1)
     {
      plateposition = 1;
      pc.printf("\nPlate position is home %d",plateposition);
     } 
     else if (homeSwitch==1 && endSwitch==1)
     {
      plateposition = 2;
      pc.printf("\nPlates are currently moving %d",plateposition); 
     }
     else if(homeSwitch==1 && endSwitch==0)
     {
     plateposition = 3;
     pc.printf("\nPlates are under beam path %d",plateposition); 
     }
     else
     {
      pc.printf("\nError, cannot locate plate position"); 
     }
}

void retractPMMA()
{
    in1=1;
    in2=0;
    wait(14);
    in1=0;
    in2=0;
    positionStatus();
}

void sendPMMA()                                                   //Command: Send plates
 {                                                                //Returns: plates arrived(),plates didn't arrive() 
    wait(2);
    in1=1;
    in2=0;
    wait(14);
    in1=0;
    in2=0;
    positionStatus();
}

void autoCalibrate()     //if machine is plugged in when the plate selector isn't at the origin...
{   
    en = 0;                      //...it automatically lowers it to the origin position 
    mot.setSpeed(800);
    mot.rotate(0);                 
    while(bottomSwitch);        //While bottom switch is unpressed   
    mot.stop();                 //Stop rotation when switch is pressed (pressed = logical level low)           
    en=1;                       //Disable driver
    mot.setPositionZero();      //Set absolute origin for plate selector at switch hit
}

void internalpullups()
{
    bottomSwitch.mode (PullUp);
    topSwitch.mode (PullUp);
    homeSwitch.mode (PullUp);
    endSwitch.mode (PullUp);
    wait (.01);
}

void numberofPlates()       // Command: Number of PMMA to send (plates)
                            // Returns: Actual number of plates selected (selectedplates), selectionerror (1 for command error, 0 for correct command) 
{    
     int stepheight,plates,selectionerror;
     double selectedplates;                        
     pc.printf("\nEnter the Number of Plates to send ");
     pc.scanf("%d",&plates);
     if (plates <= 0)
     { 
     pc.printf("\nNot a valid number, must be 1 to 16");
     selectionerror = 1;
     }
     else if (plates >= 17)
     { 
     pc.printf("\nNot a valid number, must be 1 to 16");
     selectionerror = 1;
     }
     else
     {
     selectionerror = 0;
     pc.printf("\nCommand Valid\n"); 
     en = 0;
     mot.goesTo(plates*1620);
     while(!mot.stopped());
     stepheight = mot.getPosition();        
     selectedplates = stepheight/1620;                 
     pc.printf("\n Steps taken: %d ",selectedplates);  
     mot.stop();
     en = 1;   
    }
}      
void selectionStatus()
{
   int stepheight;
   double selectedplates;
   stepheight = mot.getPosition();        
   selectedplates = stepheight/1620;                 
   pc.printf("\n Number of plates currently selected: %d ",selectedplates);
     
}                             

 
int main()
{  
    char command[256] = { 0 };
    internalpullups();
    wait (.01);
    autoCalibrate(); //...it automatically lowers it to the origin position for initial power up
                     
    while(1)
    {
      pc.printf("\nEnter Command: \n send \n retract \n position (get status) \n selection (get status)" );
      pc.scanf("\n%s", &command);
        if (strcmp (command, "send") == 0)
        {  
            pc.printf ("\nCommand Recieved: Send");   //confirmation of recieved command
            numberofPlates();                       //select number of plates to send
            sendPMMA();                  
        }
        if (strcmp (command, "retract") == 0)
        {     
            pc.printf ("\nCommand Recieved: retract");
            retractPMMA();   
        } 
        if (strcmp (command, "position") == 0)
        {     
            pc.printf ("\nCommand Recieved: position");
            positionStatus();  
        }
        if (strcmp (command, "selection") == 0)
        {
            pc.printf ("\nCommand Recieved: selection");
            selectionStatus();
        }
    }  
}    


/* int main () 
{  
    int steps, plates;
    bswitch.mode (PullUp); 
    wait (.01);
    mot.setSpeed (600);
    mot.rotate (0);         //if machine is plugged in when the plate selector isn't at the origin...
    
    while (bswitch);        //...it automatically lowers it to the origin positio
    mot.stop ();            //Stop rotation when switch is pressed (pressed = logical level low)
    en = 1;                 //Disable driver
    mot.setPositionZero (); //Set absolute origin for plate selector at switch hit
    char c[256] = { 0 };
    
    while (1)
    {
        pc.printf("Choose a command:\nPMMA 1");   
        pc.scanf ("%s", &c);   
        
        if (strcmp (c, "PMMA1") == 0)
        {  
            pc.printf ("\n match ");
        }
      
        if (strcmp (c, "no") == 0)
        {     
            pc.printf ("\n not match ");
        }   
    }
}
*/