![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Joy_Buttons versao 2
Dependencies: X_NUCLEO_IHM01A1 mbed
Fork of HelloWorld_IHM01A1_buttons by
botoesnh_default.cpp
- Committer:
- Bitelli
- Date:
- 2018-04-27
- Revision:
- 40:13d2c943dfe9
File content as of revision 40:13d2c943dfe9:
/* Includes ------------------------------------------------------------------*/ /* mbed specific header files. */ #include "mbed.h" /* Helper header files. */ #include "DevSPI.h" /* Component specific header files. */ #include "L6474.h" #include "new_file.cpp" /* Definitions ---------------------------------------------------------------*/ /* Number of steps. */ #define STEPS_1 (200 * 2) /* 1 revolution given a 200 steps motor configured at 1/2 microstep mode. */ #define safe (600) /* Delay in milliseconds. */ #define DELAY_1 1000 /* Speed in pps (Pulses Per Second). In Full Step mode: 1 pps = 1 step/s). In 1/N Step Mode: N pps = 1 step/s). */ #define SPEED_1 2400 #define SPEED_2 1200 DigitalOut myled(LED1); Serial pc(USBTX, USBRX); /* Variables -----------------------------------------------------------------*/ /* Initialization parameters. */ L6474_init_t init = { 160, /* Acceleration rate in pps^2. Range: (0..+inf). */ 160, /* Deceleration rate in pps^2. Range: (0..+inf). */ 2600, /* Maximum speed in pps. Range: (30..10000]. */ 1300, /* Minimum speed in pps. Range: [30..10000). */ 250, /* Torque regulation current in mA. Range: 31.25mA to 4000mA. */ L6474_OCD_TH_750mA, /* Overcurrent threshold (OCD_TH register). */ L6474_CONFIG_OC_SD_ENABLE, /* Overcurrent shutwdown (OC_SD field of CONFIG register). */ L6474_CONFIG_EN_TQREG_TVAL_USED, /* Torque regulation method (EN_TQREG field of CONFIG register). */ L6474_STEP_SEL_1_16, /* Step selection (STEP_SEL field of STEP_MODE register). */ L6474_SYNC_SEL_1_2, /* Sync selection (SYNC_SEL field of STEP_MODE register). */ L6474_FAST_STEP_12us, /* Fall time value (T_FAST field of T_FAST register). Range: 2us to 32us. */ L6474_TOFF_FAST_8us, /* Maximum fast decay time (T_OFF field of T_FAST register). Range: 2us to 32us. */ 3, /* Minimum ON time in us (TON_MIN register). Range: 0.5us to 64us. */ 21, /* Minimum OFF time in us (TOFF_MIN register). Range: 0.5us to 64us. */ L6474_CONFIG_TOFF_044us, /* Target Swicthing Period (field TOFF of CONFIG register). */ L6474_CONFIG_SR_320V_us, /* Slew rate (POW_SR field of CONFIG register). */ L6474_CONFIG_INT_16MHZ, /* Clock setting (OSC_CLK_SEL field of CONFIG register). */ L6474_ALARM_EN_OVERCURRENT | L6474_ALARM_EN_THERMAL_SHUTDOWN | L6474_ALARM_EN_THERMAL_WARNING | L6474_ALARM_EN_UNDERVOLTAGE | L6474_ALARM_EN_SW_TURN_ON | L6474_ALARM_EN_WRONG_NPERF_CMD /* Alarm (ALARM_EN register). */ }; /* Motor Control Component. */ L6474 *motor1; L6474 *motor2; L6474 *motor3; /*---------------------Functions -------------------*/ DigitalIn sUp(A0); DigitalIn sDown(A1); DigitalIn sLeft(A2); DigitalIn sRight(A3); DigitalIn YES(A4); DigitalIn NO(A5); DigitalIn zeroX(PC_8); DigitalIn zeroY(PC_6); DigitalIn zeroZ(PA_11); DigitalIn maxX(PC_5); DigitalIn maxY(PA_12); DigitalIn maxZ(PB_12); void fdc_inicialX(){ pc.printf("\n\rZerando eixo X"); motor1->run(StepperMotor::BWD); while(zeroX ==1){ wait(0.01); } motor1->hard_stop(); motor1->move(StepperMotor::FWD, safe); motor1->set_home(); pc.printf("\n\rEixo X zerado"); } void fdc_inicialY(){ pc.printf("\n\rZerando eixo Y"); motor2->run(StepperMotor::BWD); while(zeroY ==1){ wait(0.01); } motor2->hard_stop(); motor2->move(StepperMotor::FWD, safe); motor2->set_home(); pc.printf("\n\rEixo Y zerado"); } void fdc_inicialZ(){ pc.printf("\n\rZerando eixo Z"); motor3->run(StepperMotor::BWD); while(zeroZ ==1){ wait(0.01); } motor3->hard_stop(); motor3->move(StepperMotor::FWD, safe); motor3->set_home(); pc.printf("\n\rEixo Z zerado"); } void fdc_zeroX(){ motor1->move(StepperMotor::FWD, safe); pc.printf ("\n\rLimite do Eixo X"); pc.printf ("\n\rY: %d", motor2->get_position()); wait(2); } void fdc_zeroY(){ motor2->move(StepperMotor::FWD, safe); pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rLimite do Eixo Y"); wait(2); } void fdc_zeroZ(){ motor3->move(StepperMotor::FWD, safe); pc.printf ("\n\rZ: %d", motor3->get_position()); pc.printf ("\n\rLimite do Eixo Z"); wait(2); } void fdc_maxX(){ motor1->move(StepperMotor::BWD, safe); pc.printf ("\n\rLimite do Eixo X"); pc.printf ("\n\rY: %d", motor2->get_position()); wait(2); } void fdc_maxY(){ motor2->move(StepperMotor::BWD, safe); pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rLimite do Eixo Y"); wait(2); } void fdc_maxZ(){ motor3->move(StepperMotor::BWD, safe); pc.printf ("\n\rZ: %d", motor3->get_position()); pc.printf ("\n\rLimite do Eixo Z"); wait(2); } void zeramento(){ fdc_inicialX(); fdc_inicialY(); fdc_inicialZ(); } int referenciar_z(int referencia_z){ pc.printf("\n\rZ: %d", motor3->get_position()); while(NO!=0){ if (sUp==0){ motor3->move(StepperMotor::FWD,600); pc.printf("\n\rZ: %d", motor3->get_position()); } if (sDown==0){ motor3->move(StepperMotor::BWD,600); pc.printf("\n\rZ: %d", motor3->get_position()); } if (zeroZ ==0){ fdc_zeroZ(); } if (maxZ ==0){ fdc_maxZ(); } wait(0.1); pc.printf ("\n\rZ: %d", motor3->get_position()); if (YES==0) { pc.printf ("\n\rEixo Z referenciado!"); referencia_z=motor3->get_position(); wait(1); } } return referencia_z; } int adicionar_pontos(int j,int positionX[], int positionY[]){ while(NO!=0) { if (sUp==0) { pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rY: %d", motor2->get_position()); motor2->move(StepperMotor::FWD, 600); } if (sRight==0) { pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rY: %d", motor2->get_position()); motor1->move(StepperMotor::FWD, 600); } if (sDown==0) { pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rY: %d", motor2->get_position()); motor2->move(StepperMotor::BWD, 600); } if (sLeft==0) { pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rY: %d", motor2->get_position()); motor1->move(StepperMotor::BWD, 600); } if (zeroX ==0){ fdc_zeroX(); } if (zeroY ==0){ fdc_zeroY(); } if (maxX ==0){ fdc_maxX(); } if (maxY ==0){ fdc_maxY(); } wait(0.2); if (YES==0) { pc.printf ("\n\rPonto Adicionado!"); positionX[j]=motor1->get_position(); positionY[j]=motor2->get_position(); j++; wait(1); } } } void home (){ motor1->go_home(); motor2->go_home(); motor3->go_home(); } void move_xy(int i,int x[],int y[]){ int xi=x[i]; int yi=y[i]; motor1->go_to(xi); motor2->go_to(yi); } /*-------------------------Variables---------------------------*/ int j=0; int positionX[20]; int positionY[20]; int referencia_z=0; /*---------------------- Initialization. --------------------*/ int main() { /* Initializing SPI bus. */ DevSPI dev_spi(D11, D12, D13); /* Initializing Motor Control Component. */ motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi); motor2 = new L6474(D2, D8, D4, D3, D10, dev_spi); motor3 = new L6474(D2, D8, D5, D6, D10, dev_spi); if (motor1->init(&init) != COMPONENT_OK) { exit(EXIT_FAILURE); } if (motor2->init(&init) != COMPONENT_OK) { exit(EXIT_FAILURE); } if (motor3->init(&init) != COMPONENT_OK) { exit(EXIT_FAILURE); } pc.baud(9600); while(YES!=0){ pc.printf("\n\rZerar a mesa?"); } /*----------------------------Zerando a mesa-----------------*/ zeramento(); pc.printf("\n\rReferenciar eixo Z"); wait (2); int referencia_z=referenciar_z(referencia_z); pc.printf ("%d",referencia_z); home(); /*-------------------------Menu "Inicial"-----------------*/ pc.printf("\n\rMenu"); wait(1); /*-----------------------------Adiciontar Pontos------------------------*/ pc.printf ("\n\rX: %d", motor1->get_position()); pc.printf ("\n\rY: %d", motor2->get_position()); while(!=NO){ adicionar_pontos(j, positionX, positionY); /*-----------------------------Colar Pontos----------------------------*/ pc.printf ("\n\rIniciando..."); home(); pc.printf ("\n\rColando..."); for (int i=0;i<20;i++){ move_xy(i, positionX, positionY); motor3->go_to(referencia_z); //depositar(); motor3->go_home(); } /*------------------------Finalizar Operação/Zerar----------------------*/ home(); }