Use IQS62X sensor and move motor by detected angle
Dependencies: DRV8830 IQS62x IQSDisplayTerminal UIT_ACM1602NI mbed
Fork of Nucleo_ACM1602_I2C_DC by
main.cpp
- Committer:
- 8mona
- Date:
- 2017-09-04
- Revision:
- 3:6474ab60854e
- Parent:
- 2:ea066749e515
- Child:
- 4:83f7df775d46
File content as of revision 3:6474ab60854e:
//------------------------------------------------------------ // Demo program for LCD ACM1602NI using I2C interface // Pullup resistors for SDA and SCL: 4.7 kΩ // 2016/04/01, Copyright (c) 2016 MIKAMI, Naoki //------------------------------------------------------------ #include "ACM1602NI.hpp" #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 TOTAL_TIMES 30000 //total times n const float spd_table[] = {1.0,0.7,0.5}; static int sp_index=0; using namespace Mikami; Acm1602Ni lcd_; // Default, OK //Acm1602Ni lcd_(D14, D15); // OK //Acm1602Ni lcd_(D14, D15, 200000); // OK //Acm1602Ni lcd_(D14, D15, 200000, true, true); // OK //Acm1602Ni lcd_(PB_3, PB_10); // OK //Acm1602Ni lcd_(PC_9, PA_8); // OK //Acm1602Ni lcd_(PB_4, PA_8); // OK Ticker timer_; I2C i2c(D14, D15); DRV8830 motor(i2c, DRV8830ADDR_NN); //DigitalOut Relay1(D2); InterruptIn button1(USER_BUTTON); static float motor_speed; // Display elapsed time in minutes and seconds void TimerIsr() { //For LED Time-Sec display static int k = 0; static char ctext[4]="---"; div_t d_Cycle = div (k, SWITCH_PERIOD); //for Current time div_t d_sec = div(k,600); //60s * 10n int t_min = d_sec.quot; div_t d_min = div(t_min,60); //1min=60s int t_hr = d_min.quot; //for Current time div_t df_sec = div(TOTAL_TIMES*SWITCH_PERIOD,600); //60s * 10n int tf_min = df_sec.quot; div_t df_min = div(tf_min,60); //1min=60s int tf_hr = df_min.quot; //Motor activation if(d_Cycle.rem ==WAIT_DELAY) { motor_speed=spd_table[sp_index]; strcpy(ctext," CW"); //ctext="CW"; } else if (d_Cycle.rem == (WAIT_DELAY+ON_DURATION) ) { //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; strcpy(ctext,"OFF"); } if(d_Cycle.quot==TOTAL_TIMES) { timer_.detach(); } /* char str[20]; sprintf(str, "%d'%2d\"", msec.quot, msec.rem); lcd_.WriteStringXY(str, 0, 1); */ //1 Row //lcd_.WriteStringXY("#",0,0); lcd_.WriteValueXY("%s", ctext, 0,0); lcd_.WriteValue("% 5d/", d_Cycle.quot); lcd_.WriteValue("%0d",TOTAL_TIMES); lcd_.WriteValue("V%0d",sp_index); //2 Row lcd_.WriteValueXY("%03dh", t_hr, 0, 1); lcd_.WriteValue("%02dm", d_min.rem); lcd_.WriteValue("%03ds/", d_sec.rem); lcd_.WriteValue("%03dh", tf_hr); lcd_.WriteValue("%02dm", df_min.rem); k++; } void flip() { static bool b = false; if(b==false) { timer_.attach(&TimerIsr, 0.1); } else { timer_.detach(); //Relay1=0; sp_index++; if (sp_index == 3) { sp_index = 0; } } b=!b; } int main() { //motor.speed(0); // Check error and reset //LCD_cont=0; //if (lcd_.IsConnected()) printf("\r\nConnected"); //else printf("\r\nDisconnected"); TimerIsr(); //timer_.attach(&TimerIsr, 0.1); button1.fall(&flip); bool status = motor.status(); if (status & DRV8830_F_FAULT){ motor.reset(); } while (true) { motor.speed(motor_speed); } }