Use IQS62X sensor and move motor by detected angle

Dependencies:   DRV8830 IQS62x IQSDisplayTerminal UIT_ACM1602NI mbed

Fork of Nucleo_ACM1602_I2C_DC by Thinkbed

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) {}
}