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
--- 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
