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-06-07
- Revision:
- 2:ea066749e515
- Parent:
- 1:d5e9bd9b38ad
- Child:
- 3:6474ab60854e
File content as of revision 2:ea066749e515:
//------------------------------------------------------------
// 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"
//Cycle
#define ON_DURATION 20 //On time [*100ms]
#define SWITCH_PERIOD 200 //Cycle time[*100ms]
#define TOTAL_TIMES 10000 //total times n
#define INITIAL_DELAY 10 //Initial delay for cycle
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_;
DigitalOut Relay1(D2);
InterruptIn button1(USER_BUTTON);
// Display elapsed time in minutes and seconds
void TimerIsr()
{
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;
if(d_Cycle.rem ==INITIAL_DELAY)
{
Relay1=1;
strcpy(ctext," ON");
//ctext="ON!";
}
else if (d_Cycle.rem == (INITIAL_DELAY+ON_DURATION) )
{
Relay1=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);
//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;
}
b=!b;
}
int main()
{
//LCD_cont=0;
if (lcd_.IsConnected()) printf("\r\nConnected");
else printf("\r\nDisconnected");
TimerIsr();
//timer_.attach(&TimerIsr, 0.1);
button1.fall(&flip);
while (true) {}
}
