Use IQS62X sensor and move motor by detected angle

Dependencies:   DRV8830 IQS62x IQSDisplayTerminal UIT_ACM1602NI mbed

Fork of Nucleo_ACM1602_I2C_DC by Thinkbed

Committer:
8mona
Date:
Mon Sep 04 15:28:40 2017 +0000
Revision:
3:6474ab60854e
Parent:
2:ea066749e515
Child:
4:83f7df775d46
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:132eb47d57fb 1 //------------------------------------------------------------
MikamiUitOpen 0:132eb47d57fb 2 // Demo program for LCD ACM1602NI using I2C interface
MikamiUitOpen 0:132eb47d57fb 3 // Pullup resistors for SDA and SCL: 4.7 kΩ
MikamiUitOpen 1:d5e9bd9b38ad 4 // 2016/04/01, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:132eb47d57fb 5 //------------------------------------------------------------
MikamiUitOpen 0:132eb47d57fb 6
MikamiUitOpen 0:132eb47d57fb 7 #include "ACM1602NI.hpp"
8mona 3:6474ab60854e 8 #include "DRV8830.h"
8mona 3:6474ab60854e 9
8mona 2:ea066749e515 10 //Cycle
8mona 3:6474ab60854e 11 #define ON_DURATION 5 //On time [*100ms]
8mona 3:6474ab60854e 12 #define SWITCH_PERIOD 30 //Cycle time[*100ms]
8mona 3:6474ab60854e 13 #define WAIT_DELAY 5 //Delay time [*100ms]
8mona 3:6474ab60854e 14 #define TOTAL_TIMES 30000 //total times n
8mona 3:6474ab60854e 15
8mona 3:6474ab60854e 16
8mona 3:6474ab60854e 17 const float spd_table[] = {1.0,0.7,0.5};
8mona 3:6474ab60854e 18 static int sp_index=0;
8mona 2:ea066749e515 19
8mona 2:ea066749e515 20
MikamiUitOpen 0:132eb47d57fb 21 using namespace Mikami;
MikamiUitOpen 0:132eb47d57fb 22
MikamiUitOpen 0:132eb47d57fb 23 Acm1602Ni lcd_; // Default, OK
8mona 3:6474ab60854e 24
MikamiUitOpen 0:132eb47d57fb 25 //Acm1602Ni lcd_(D14, D15); // OK
MikamiUitOpen 0:132eb47d57fb 26 //Acm1602Ni lcd_(D14, D15, 200000); // OK
MikamiUitOpen 0:132eb47d57fb 27 //Acm1602Ni lcd_(D14, D15, 200000, true, true); // OK
MikamiUitOpen 0:132eb47d57fb 28 //Acm1602Ni lcd_(PB_3, PB_10); // OK
MikamiUitOpen 0:132eb47d57fb 29 //Acm1602Ni lcd_(PC_9, PA_8); // OK
MikamiUitOpen 0:132eb47d57fb 30 //Acm1602Ni lcd_(PB_4, PA_8); // OK
MikamiUitOpen 0:132eb47d57fb 31
MikamiUitOpen 0:132eb47d57fb 32 Ticker timer_;
8mona 3:6474ab60854e 33 I2C i2c(D14, D15);
8mona 3:6474ab60854e 34 DRV8830 motor(i2c, DRV8830ADDR_NN);
8mona 3:6474ab60854e 35 //DigitalOut Relay1(D2);
8mona 2:ea066749e515 36 InterruptIn button1(USER_BUTTON);
8mona 3:6474ab60854e 37 static float motor_speed;
MikamiUitOpen 0:132eb47d57fb 38
8mona 3:6474ab60854e 39
MikamiUitOpen 0:132eb47d57fb 40 // Display elapsed time in minutes and seconds
MikamiUitOpen 0:132eb47d57fb 41 void TimerIsr()
MikamiUitOpen 0:132eb47d57fb 42 {
8mona 3:6474ab60854e 43
8mona 3:6474ab60854e 44 //For LED Time-Sec display
MikamiUitOpen 0:132eb47d57fb 45 static int k = 0;
8mona 2:ea066749e515 46 static char ctext[4]="---";
8mona 2:ea066749e515 47 div_t d_Cycle = div (k, SWITCH_PERIOD);
8mona 2:ea066749e515 48
8mona 2:ea066749e515 49 //for Current time
8mona 2:ea066749e515 50 div_t d_sec = div(k,600); //60s * 10n
8mona 2:ea066749e515 51 int t_min = d_sec.quot;
8mona 2:ea066749e515 52 div_t d_min = div(t_min,60); //1min=60s
8mona 2:ea066749e515 53 int t_hr = d_min.quot;
8mona 2:ea066749e515 54
8mona 2:ea066749e515 55 //for Current time
8mona 2:ea066749e515 56 div_t df_sec = div(TOTAL_TIMES*SWITCH_PERIOD,600); //60s * 10n
8mona 2:ea066749e515 57 int tf_min = df_sec.quot;
8mona 2:ea066749e515 58 div_t df_min = div(tf_min,60); //1min=60s
8mona 2:ea066749e515 59 int tf_hr = df_min.quot;
8mona 3:6474ab60854e 60
8mona 3:6474ab60854e 61
8mona 3:6474ab60854e 62 //Motor activation
8mona 2:ea066749e515 63
8mona 2:ea066749e515 64
8mona 3:6474ab60854e 65 if(d_Cycle.rem ==WAIT_DELAY)
8mona 3:6474ab60854e 66 {
8mona 3:6474ab60854e 67 motor_speed=spd_table[sp_index];
8mona 3:6474ab60854e 68 strcpy(ctext," CW");
8mona 3:6474ab60854e 69 //ctext="CW";
8mona 3:6474ab60854e 70 }
8mona 3:6474ab60854e 71
8mona 3:6474ab60854e 72 else if (d_Cycle.rem == (WAIT_DELAY+ON_DURATION) )
8mona 2:ea066749e515 73 {
8mona 3:6474ab60854e 74 //wait_ms(20);
8mona 3:6474ab60854e 75 motor_speed=0;
8mona 3:6474ab60854e 76 strcpy(ctext,"OFF");
8mona 2:ea066749e515 77 }
8mona 3:6474ab60854e 78
8mona 3:6474ab60854e 79 else if (d_Cycle.rem == (2*WAIT_DELAY+ON_DURATION) )
8mona 2:ea066749e515 80 {
8mona 3:6474ab60854e 81 //wait_ms(20);
8mona 3:6474ab60854e 82 motor_speed=-spd_table[sp_index];
8mona 3:6474ab60854e 83 strcpy(ctext,"CCW");
8mona 3:6474ab60854e 84 }
8mona 3:6474ab60854e 85
8mona 3:6474ab60854e 86 else if (d_Cycle.rem == (2*WAIT_DELAY+ON_DURATION*2) )
8mona 3:6474ab60854e 87 {
8mona 3:6474ab60854e 88 //wait_ms(20);
8mona 3:6474ab60854e 89 motor_speed=0;
8mona 2:ea066749e515 90 strcpy(ctext,"OFF");
8mona 2:ea066749e515 91 }
8mona 2:ea066749e515 92
8mona 2:ea066749e515 93
8mona 2:ea066749e515 94 if(d_Cycle.quot==TOTAL_TIMES)
8mona 2:ea066749e515 95 {
8mona 2:ea066749e515 96 timer_.detach();
8mona 2:ea066749e515 97 }
8mona 3:6474ab60854e 98
8mona 2:ea066749e515 99
8mona 2:ea066749e515 100
MikamiUitOpen 1:d5e9bd9b38ad 101 /*
MikamiUitOpen 0:132eb47d57fb 102 char str[20];
8mona 2:ea066749e515 103 sprintf(str, "%d'%2d\"", msec.quot, msec.rem);
MikamiUitOpen 0:132eb47d57fb 104 lcd_.WriteStringXY(str, 0, 1);
MikamiUitOpen 1:d5e9bd9b38ad 105 */
8mona 2:ea066749e515 106
8mona 2:ea066749e515 107 //1 Row
8mona 2:ea066749e515 108 //lcd_.WriteStringXY("#",0,0);
8mona 3:6474ab60854e 109
8mona 2:ea066749e515 110 lcd_.WriteValueXY("%s", ctext, 0,0);
8mona 2:ea066749e515 111 lcd_.WriteValue("% 5d/", d_Cycle.quot);
8mona 2:ea066749e515 112 lcd_.WriteValue("%0d",TOTAL_TIMES);
8mona 3:6474ab60854e 113 lcd_.WriteValue("V%0d",sp_index);
8mona 3:6474ab60854e 114
8mona 2:ea066749e515 115
8mona 2:ea066749e515 116 //2 Row
8mona 2:ea066749e515 117 lcd_.WriteValueXY("%03dh", t_hr, 0, 1);
8mona 2:ea066749e515 118 lcd_.WriteValue("%02dm", d_min.rem);
8mona 2:ea066749e515 119 lcd_.WriteValue("%03ds/", d_sec.rem);
8mona 2:ea066749e515 120 lcd_.WriteValue("%03dh", tf_hr);
8mona 2:ea066749e515 121 lcd_.WriteValue("%02dm", df_min.rem);
8mona 3:6474ab60854e 122
8mona 2:ea066749e515 123
8mona 2:ea066749e515 124 k++;
MikamiUitOpen 0:132eb47d57fb 125 }
MikamiUitOpen 0:132eb47d57fb 126
8mona 2:ea066749e515 127
8mona 2:ea066749e515 128
8mona 2:ea066749e515 129 void flip() {
8mona 2:ea066749e515 130 static bool b = false;
8mona 2:ea066749e515 131
8mona 3:6474ab60854e 132
8mona 3:6474ab60854e 133
8mona 2:ea066749e515 134 if(b==false)
8mona 2:ea066749e515 135 {
8mona 2:ea066749e515 136 timer_.attach(&TimerIsr, 0.1);
8mona 2:ea066749e515 137 }
8mona 2:ea066749e515 138
8mona 2:ea066749e515 139 else
8mona 2:ea066749e515 140 {
8mona 2:ea066749e515 141 timer_.detach();
8mona 3:6474ab60854e 142 //Relay1=0;
8mona 3:6474ab60854e 143 sp_index++;
8mona 3:6474ab60854e 144 if (sp_index == 3)
8mona 3:6474ab60854e 145 {
8mona 3:6474ab60854e 146 sp_index = 0;
8mona 3:6474ab60854e 147 }
8mona 2:ea066749e515 148 }
8mona 2:ea066749e515 149 b=!b;
8mona 2:ea066749e515 150
8mona 2:ea066749e515 151 }
8mona 2:ea066749e515 152
8mona 2:ea066749e515 153
MikamiUitOpen 0:132eb47d57fb 154 int main()
MikamiUitOpen 0:132eb47d57fb 155 {
8mona 3:6474ab60854e 156 //motor.speed(0);
8mona 3:6474ab60854e 157 // Check error and reset
8mona 3:6474ab60854e 158
8mona 2:ea066749e515 159
8mona 3:6474ab60854e 160
8mona 2:ea066749e515 161 //LCD_cont=0;
8mona 3:6474ab60854e 162 //if (lcd_.IsConnected()) printf("\r\nConnected");
8mona 3:6474ab60854e 163 //else printf("\r\nDisconnected");
MikamiUitOpen 0:132eb47d57fb 164
MikamiUitOpen 0:132eb47d57fb 165 TimerIsr();
8mona 2:ea066749e515 166 //timer_.attach(&TimerIsr, 0.1);
8mona 2:ea066749e515 167 button1.fall(&flip);
MikamiUitOpen 0:132eb47d57fb 168
8mona 3:6474ab60854e 169 bool status = motor.status();
8mona 3:6474ab60854e 170 if (status & DRV8830_F_FAULT){
8mona 3:6474ab60854e 171 motor.reset();
8mona 3:6474ab60854e 172 }
8mona 3:6474ab60854e 173
8mona 3:6474ab60854e 174 while (true) {
8mona 3:6474ab60854e 175 motor.speed(motor_speed);
8mona 3:6474ab60854e 176 }
MikamiUitOpen 0:132eb47d57fb 177 }
MikamiUitOpen 0:132eb47d57fb 178