2 Motores + Joystick
Dependencies: X_NUCLEO_IHM01A1 TextLCD
Fork of HelloWorld_IHM01A1_2Motors_mbedOS by
Revision 42:a04bff02f231, committed 2018-05-15
- Comitter:
- leogrotti
- Date:
- Tue May 15 14:23:01 2018 +0000
- Parent:
- 41:7f91e949ca88
- Child:
- 43:d08a3f6b65b5
- Commit message:
- 3 eixos funcionais sem interrupt
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed-os.lib | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu May 03 18:23:42 2018 +0000
+++ b/main.cpp Tue May 15 14:23:01 2018 +0000
@@ -55,7 +55,7 @@
#define STEPS 3200
/* Delay in milliseconds. */
-#define DELAY_1 2000
+#define DELAY_1 20
#define DELAY_2 6000
#define DELAY_3 8000
@@ -68,40 +68,17 @@
/* Variables -----------------------------------------------------------------*/
-InterruptIn button1(PC_1);
-InterruptIn button2(PC_0);
+//InterruptIn sensorX1(PC_9);
+//InterruptIn sensorY1(PA_14);
-/* Initialization parameters. */
-//L6474_init_t init = {
-// 160, /* Acceleration rate in pps^2. Range: (0..+inf). */
-// 160, /* Deceleration rate in pps^2. Range: (0..+inf). */
-// 4000, /* Maximum speed in pps. Range: (30..10000]. */
-// 1300, /* Minimum speed in pps. Range: [30..10000). */
-// 1500, /* Torque regulation current in mA. Range: 31.25mA to 4000mA. */
-// L6474_OCD_TH_1875mA, /* 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_2, /* 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). */
-//};
+
Serial pc(USBTX, USBRX);
-AnalogIn eixo_X(A0);
-AnalogIn eixo_Y(A1);
+AnalogIn eixo_X(A2);
+AnalogIn eixo_Y(A3);
+AnalogIn eixo_ZU(A0);
+AnalogIn eixo_ZD(A1);
@@ -109,9 +86,14 @@
float y;
float w;
float u;
+float zu;
+float zd;
-//float a;
+int count;
+
+bool flagX1=0;
+bool flagY1=0;
unsigned int minspeed = 1300;
@@ -130,39 +112,9 @@
L6474 *motor2;
L6474 *motor3;
-void flag_irq_handler(void)
-{
- /* Set ISR flag. */
- motor3->isr_flag = TRUE;
-
- /* Get the value of the status register. */
- unsigned int status = motor3->get_status();
-
- /* Check NOTPERF_CMD flag: if set, the command received by SPI can't be performed. */
- /* This often occures when a command is sent to the L6474 while it is not in HiZ state. */
- if ((status & L6474_STATUS_NOTPERF_CMD) == L6474_STATUS_NOTPERF_CMD) {
- printf(" WARNING: \"FLAG\" interrupt triggered. Non-performable command detected when updating L6474's registers while not in HiZ state.\r\n");
- }
-
- /* Reset ISR flag. */
- motor3->isr_flag = FALSE;
-}
-
/* Main ----------------------------------------------------------------------*/
-
-void pressed_cima() {
-
- motor3->run(StepperMotor::FWD);
- printf ("Ariba! \r\n");
-
-}
-void pressed_baixo() {
-
- motor3->run(StepperMotor::BWD);
- printf ("Abajo! \r\n");
-
-}
+/*
void released_1()
{
motor3->hard_stop();
@@ -177,6 +129,28 @@
}
+void paraX1() {
+ flagX1 = 1;
+ motor2->hard_stop();
+
+ }
+
+ void continuaX1() {
+ flagX1 = 0;
+ }
+
+
+ void paraY1() {
+ flagY1 = 1;
+ motor1->hard_stop();
+
+ }
+
+ void continuaY1() {
+ flagY1 = 0;
+ }
+ */
+
int main()
{
/*----- Initialization. -----*/
@@ -202,103 +176,119 @@
- /* Attaching and enabling interrupt handlers. */
- motor3->attach_flag_irq(&flag_irq_handler);
+ /* Attaching and enabling interrupt handlers.
+ motor3->attach_flag_irq(&flag_irq_handler3);
motor3->enable_flag_irq();
+ motor1->attach_flag_irq(&flag_irq_handler1);
+ motor1->enable_flag_irq();
+ motor2->attach_flag_irq(&flag_irq_handler2);
+ motor2->enable_flag_irq();
+ */
+ //sensorX1.rise(¶X1);
+ // sensorX1.fall(&continuaX1);
- button1.rise(&pressed_cima);
- button2.rise(&pressed_baixo);
- button1.fall(&released_1);
- button2.fall(&released_2);
-
+ //sensorY1.rise(¶Y1);
+ //sensorY1.fall(&continuaY1);
+
+
while(true) {
+ count = count +1;
+ // Leitura analógica
u = eixo_X.read();
w = eixo_Y.read();
-
- /* if (button1.read()==0()){
-
- button.fall()
- printf("button1 fwd \r\n\n");
-
- }
-
- // else {
- // motor3->run(StepperMotor::BWD);
- // printf("button1 bwd \r\n\n");
-
- // }
-
- if (button1.read()==0){
-
- button1.rise()
- printf("button1 bwd \r\n\n");
+ zu = eixo_ZU.read();
+ zd = eixo_ZD.read();
+ if (count == 10000) {
+ printf("zu =%f \r\n\n", zu);
+ printf("zd =%f \r\n\n", zd);
+ count = 0;
+ }
- }*/
-
-
- if (u>0.740) {
-
- motor1->run(StepperMotor::FWD);
- //wait_ms(DELAY_1);
-
- speed1 = motor1->get_speed();
-
- printf("speed1 =%d \r\n\n", speed1);
- printf("U =%f \r\n\n", u);
-
- }
- else{ if(u<0.65) {
+ //printf("X =%i \r\n\n", flagX1);
+ // printf("Y =%i \r\n\n", flagY1);
+
+ // Movimentando eixo Z cima caso botão 1 apertado
+ if (zu >0.7) {
+ motor3->run(StepperMotor::FWD);
+ //wait_ms(DELAY_1);
+ speed3 = motor3->get_speed();
+ //wait_ms(DELAY_1);
+ }
- motor1->run(StepperMotor::BWD);
- // wait_ms(DELAY_1);
-
- speed1 = motor1->get_speed();
+ // Parando eixo Z caso botão 1 e 2 liberado
+ if (zu< 0.7 && zd < 0.7){
+ motor3->hard_stop();
+ // wait_ms(DELAY_1);
+ speed3 = 0;
+ //wait_ms(DELAY_1);
+ }
+
+// Movimentando eixo Z baixo caso botão 2 apertado
+ if (zd >0.7) {
+ motor3->run(StepperMotor::BWD);
+ //wait_ms(DELAY_1);
+ speed3 = motor3->get_speed();
+ //wait_ms(DELAY_1);
+ }
- printf("speed1 =%d \r\n\n", speed1);
-
- printf("U =%f \r\n\n", u);
-
+ // Parando eixo Z caso botão 1 e 2 liberado
+ if (zu< 0.7 && zd < 0.7){
+ motor3->hard_stop();
+ // wait_ms(DELAY_1);
+ speed3 = 0;
+ //wait_ms(DELAY_1);
+ }
+
+
+// Movimentando eixo Y duas direções com joystick
+ //if (flagY1 == 0 ) {
+
+// Movimentando eixo Y fwd
+ if (u>0.820) {
+ motor1->run(StepperMotor::FWD);
+ //wait_ms(DELAY_1);
+ speed1 = motor1->get_speed();
+ //wait_ms(DELAY_1);
+ }
+// Movimentando eixo Y bwd
+ else{ if(u<0.65) {
+ motor1->run(StepperMotor::BWD);
+ //wait_ms(DELAY_1);
+ speed1 = motor1->get_speed();
+ // wait_ms(DELAY_1);
}
- else
- motor1->hard_stop();
- // wait_ms(DELAY_1);
-
+// parando eixo Y
+ else
+ motor1->hard_stop();
+ //wait_ms(DELAY_1);
speed1 = 0;
- printf("speed1 =%d \r\n\n", speed1);
-
- printf("U =%f \r\n\n", u);
-
- }
-
- if (w>0.76) {
-
+ //wait_ms(DELAY_1);
+ //}
+ }
+
+// Movimentando eixo X duas direções com joystick
+ //if (flagX1 == 0) {
+// Movimentando eixo Y fwd
+ if (w>0.80) {
motor2->run(StepperMotor::BWD);
- speed2 = motor2->get_speed();
-
+ speed2 = motor2->get_speed();
printf("speed2 =%d \r\n\n", speed2);
printf("W =%f \r\n\n", w);
-
- }
- else{ if(w<0.67) {
-
-
+ }
+// Movimentando eixo Y Bwd
+ else{ if(w<0.60) {
motor2->run(StepperMotor::FWD);
- speed2 = motor2->get_speed();
-
+ speed2 = motor2->get_speed();
printf("speed2 =%d \r\n\n", speed2);
printf("W =%f \r\n\n", w);
-
- }
- else
+ }
+// parando eixo X
+ else
motor2->hard_stop();
speed2 = 0;
printf("speed2 =%d \r\n\n", speed2);
- printf("W =%f \r\n\n", w);
-
}
-
-
}
}
\ No newline at end of file
--- a/mbed-os.lib Thu May 03 18:23:42 2018 +0000 +++ b/mbed-os.lib Tue May 15 14:23:01 2018 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-os/#c9e63f14085f5751ff5ead79a7c0382d50a813a2 +https://github.com/ARMmbed/mbed-os/#c05d72c3c005fbb7e92c3994c32bda45218ae7fe
