Use IQS62X sensor and move motor by detected angle
Dependencies: DRV8830 IQS62x IQSDisplayTerminal UIT_ACM1602NI mbed
Fork of Nucleo_ACM1602_I2C_DC by
Diff: main.cpp
- Revision:
- 4:83f7df775d46
- Parent:
- 3:6474ab60854e
- Child:
- 5:2b9614aa1171
diff -r 6474ab60854e -r 83f7df775d46 main.cpp --- a/main.cpp Mon Sep 04 15:28:40 2017 +0000 +++ b/main.cpp Tue Sep 05 15:05:38 2017 +0000 @@ -8,13 +8,17 @@ #include "DRV8830.h" //Cycle -#define ON_DURATION 5 //On time [*100ms] -#define SWITCH_PERIOD 30 //Cycle time[*100ms] -#define WAIT_DELAY 5 //Delay time [*100ms] +#define ON_DURATION 8*2 //On time [*100ms] +#define SWITCH_PERIOD 30*2 //Cycle time[*100ms] +#define WAIT_DELAY 5*2 //Delay time [*100ms] #define TOTAL_TIMES 30000 //total times n +#define ACCEL_SIZE 6 +#define DECEL_SIZE 8 const float spd_table[] = {1.0,0.7,0.5}; +const float vol_accel[ACCEL_SIZE] = {0,0.3,0.6,0.8,0.95,1}; +const float vol_decel[DECEL_SIZE] = {1,0.9,0.75,0.55,0.4,0.25,0.15,0}; static int sp_index=0; @@ -60,33 +64,66 @@ //Motor activation - + static int mode = 1; - if(d_Cycle.rem ==WAIT_DELAY) + if(WAIT_DELAY <= d_Cycle.rem && d_Cycle.rem < (WAIT_DELAY+ON_DURATION) ) + { + int accel_index = d_Cycle.rem - WAIT_DELAY; + if (accel_index < ACCEL_SIZE) + { + motor_speed=vol_accel[accel_index] * spd_table[sp_index]; + } + else + { + motor_speed=spd_table[sp_index]; + } + strcpy(ctext," CW"); + //ctext="CW"; + + } + + else if ( (WAIT_DELAY+ON_DURATION)<= d_Cycle.rem && d_Cycle.rem <(2*WAIT_DELAY+ON_DURATION) ) { - motor_speed=spd_table[sp_index]; + //wait_ms(20); + int accel_index = d_Cycle.rem - (WAIT_DELAY+ON_DURATION); + if (accel_index< DECEL_SIZE) + { + motor_speed=vol_decel[accel_index] * spd_table[sp_index]; + } + else + { + motor_speed=0; + } + strcpy(ctext,"OFF"); + } + + else if ( (2*WAIT_DELAY+ON_DURATION) <= d_Cycle.rem && d_Cycle.rem <(2*WAIT_DELAY+2* ON_DURATION) ) + { + int accel_index = d_Cycle.rem - (2*WAIT_DELAY+ON_DURATION); + if (accel_index < ACCEL_SIZE) + { + motor_speed= - vol_accel[accel_index] * spd_table[sp_index]; + } + else + { + motor_speed= -spd_table[sp_index]; + } strcpy(ctext," CW"); //ctext="CW"; } - else if (d_Cycle.rem == (WAIT_DELAY+ON_DURATION) ) + else if ( (2*WAIT_DELAY+2* ON_DURATION) <= d_Cycle.rem ) { //wait_ms(20); - motor_speed=0; - strcpy(ctext,"OFF"); - } - - else if (d_Cycle.rem == (2*WAIT_DELAY+ON_DURATION) ) - { - //wait_ms(20); - motor_speed=-spd_table[sp_index]; - strcpy(ctext,"CCW"); - } - - else if (d_Cycle.rem == (2*WAIT_DELAY+ON_DURATION*2) ) - { - //wait_ms(20); - motor_speed=0; + int accel_index = d_Cycle.rem - ((2*WAIT_DELAY+2* ON_DURATION)); + if (accel_index< DECEL_SIZE) + { + motor_speed= -vol_decel[accel_index] * spd_table[sp_index]; + } + else + { + motor_speed=0; + } strcpy(ctext,"OFF"); } @@ -107,10 +144,10 @@ //1 Row //lcd_.WriteStringXY("#",0,0); - lcd_.WriteValueXY("%s", ctext, 0,0); - lcd_.WriteValue("% 5d/", d_Cycle.quot); + lcd_.WriteValueXY("%1.1f", motor_speed, 0,0); + lcd_.WriteValue("%5d/", d_Cycle.quot); lcd_.WriteValue("%0d",TOTAL_TIMES); - lcd_.WriteValue("V%0d",sp_index); + lcd_.WriteValue("V%0d",motor_speed); //2 Row @@ -128,12 +165,10 @@ void flip() { static bool b = false; - - - + if(b==false) { - timer_.attach(&TimerIsr, 0.1); + timer_.attach(&TimerIsr, 0.05); } else