step rc

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "AccelStepper.h"
00003 #include "PinNames.h"
00004 #include "stdio.h"
00005 //#include <avr/wdt.h>
00006 
00007 Serial pc(USBTX, USBRX);
00008 
00009 
00010 //Pins
00011 #define STP1_PIN 2 //AnalogOut STP_PIN(nome do pino da placa) ##DESCOMENTAR ESSE BLOCO##
00012 #define DIR1_PIN 3 // AnalogOut DIR_PIN(nome do pino da placa)
00013 /*#define ENA_PIN 2 // DigitalOut ENA_PIN(nome do pino da placa)
00014 #define HOM_PIN 12*/ // DigitalIn HOM_PIN(nome do pino da placa)
00015 
00016 //AnalogOut STP_PIN(PTB0);
00017 //AnalogOut DIR_PIN(PTB1);
00018 DigitalOut ENA_PIN(P1_13);
00019 DigitalIn HOM_PIN(P0_28);
00020 
00021 //Max
00022 #define MAX_ACCEL_mms2 500.0
00023 #define MAX_SPEED_mms  75.0
00024 #define MAX_POS_mm 100.0
00025 
00026 //Stepper Motor parameters
00027 #define STEPS_by_REV  400.0
00028 #define mm_by_REV 25.0
00029 
00030 //Home Parameters
00031 #define HOME_SPEED_mms  10.0
00032 #define HOME_INCREMENT_mm  1.0
00033 #define HOME_PRESS_POSITION_mm  2.0
00034 
00035 //Consts
00036 const unsigned int MAX_ACCEL_STEPS2 = (MAX_ACCEL_mms2 *  STEPS_by_REV) / mm_by_REV;
00037 unsigned int MAX_SPEED_STEPS = (MAX_SPEED_mms *  STEPS_by_REV) / mm_by_REV;
00038 const unsigned int HOME_SPEED_STEPS = (HOME_SPEED_mms *  STEPS_by_REV) / mm_by_REV;
00039 const unsigned int HOME_INCREMENT_STEP = (HOME_INCREMENT_mm  *  STEPS_by_REV) / mm_by_REV;
00040 const unsigned int HOME_PRESS_POSITION_STEP = (HOME_PRESS_POSITION_mm  *  STEPS_by_REV) / mm_by_REV;
00041 
00042 //vars
00043 unsigned int MaxPos_step =  (MAX_POS_mm *  STEPS_by_REV) / mm_by_REV;
00044 bool CycleOn = true;
00045 bool HomeDone = false;
00046 
00047 void MotorGoHome(AccelStepper &stpr)
00048 {
00049   int CurrentPos = 0;
00050   pc.printf("Finding Home...");
00051   stpr.setCurrentPosition(0);
00052   stpr.setMaxSpeed(HOME_SPEED_STEPS);
00053   while (HOM_PIN == HIGH)
00054   {
00055     CurrentPos = CurrentPos - HOME_INCREMENT_STEP;
00056     stpr.runToNewPosition(CurrentPos);
00057   }
00058   stpr.setCurrentPosition(0);
00059   stpr.runToNewPosition(HOME_PRESS_POSITION_STEP);
00060   stpr.setCurrentPosition(0);
00061   HomeDone = true;
00062   pc.printf("Finding Home...");
00063 }
00064 
00065 void setup(AccelStepper &stpr)
00066 {
00067   pc.baud(250000);
00068   //pinMode(10  , OUTPUT);
00069   //pinMode(STP_PIN  , OUTPUT);
00070   //pinMode(DIR_PIN    , OUTPUT);
00071   //pinMode(ENA_PIN    , OUTPUT);
00072   ENA_PIN = HIGH; 
00073   stpr.setMaxSpeed(MAX_SPEED_STEPS);
00074   stpr.setAcceleration(MAX_ACCEL_STEPS2);
00075   MotorGoHome(stpr);
00076   stpr.setMaxSpeed(MAX_SPEED_STEPS);
00077   stpr.setAcceleration(MAX_ACCEL_STEPS2);
00078   //wdt_enable(WDTO_2S);
00079 }
00080 
00081 int main(){
00082 
00083     AccelStepper stepper(2, P1_2, P0_23);   
00084     
00085     setup(stepper);
00086     
00087     while(1){
00088         //wdt_reset();
00089         if (CycleOn)
00090         {
00091             if (stepper.currentPosition() == 0)
00092             {
00093                 wait(500);
00094                 stepper.moveTo(MaxPos_step);
00095             }
00096             else if (stepper.currentPosition() == MaxPos_step)
00097             {
00098                 wait(500);
00099                 stepper.moveTo(0);
00100             }
00101         }
00102         //analogWrite(10, map(stepper.currentPosition(), 0, MaxPos_step, 0, 250));
00103         stepper.run();
00104         if((HOM_PIN == LOW) && (HomeDone)) while(1);
00105 
00106         if (pc.readable())
00107         {
00108             char Option = pc.getc();
00109             if (Option == 'P')
00110             {
00111                 //float NewPos = serial.parsefloat();
00112                 //stepper.moveTo((NewPos *  STEPS_by_REV) / mm_by_REV);
00113             }
00114             else if (Option == 'C')
00115             {
00116                 CycleOn = !CycleOn ;
00117             }
00118             else if (Option == 'S')
00119             {
00120                 //float NewSpeed = parsefloat(); //pc.??
00121                 //stepper.setMaxSpeed((NewSpeed *  STEPS_by_REV) / mm_by_REV);
00122             }
00123             else if (Option == 'H')
00124             {
00125                 MotorGoHome(stepper);
00126             }
00127         }         
00128     }
00129     return 0;    
00130 }
00131