2016 Rotary Encoder program

Dependencies:   QEI i2cslave mbed

Fork of 2016_slave_rorikon_2 by hidaka sato

not used

main.cpp

Committer:
sgrsn
Date:
2016-08-16
Revision:
0:f6b9d01fdda6

File content as of revision 0:f6b9d01fdda6:

#include "mbed.h"
#include "QEI.h"
#include "i2cslave.h"
#include "define.h"

union UNION
{
    int i;
    char c[6];
};

UNION obj;

DigitalOut led(dp28);
void Func()
{
    obj.c[5]++;
    //printf(" %d", obj.c[5]);
    if(obj.c[5] > 2)
    {
        //obj.c[4] = 1;
        NVIC_SystemReset();
    }
}


QEI rorikon(dp1, dp2, NC, 50, QEI::X4_ENCODING);
BusOut leds(dp26, dp24);
Serial slave(dp16, dp15);

int main()
{
    Ticker t;
    t.attach(Func, 0.1);
    i2cslave i2c(dp5, dp27, obj.c);
    i2c.frequency(1000000);
    /*change address every micon***********/
    i2c.address(RE1_addr);
    /**************************************/
    double data = 0;
    
    NVIC_SetPriority(TIMER_16_0_IRQn, 5);
    NVIC_SetPriority(TIMER_16_1_IRQn, 5);
    NVIC_SetPriority(TIMER_32_0_IRQn, 5);
    NVIC_SetPriority(TIMER_32_1_IRQn, 5);
    NVIC_SetPriority(EINT3_IRQn, 20);
    NVIC_SetPriority(EINT2_IRQn, 20);
    NVIC_SetPriority(EINT1_IRQn, 20);
    NVIC_SetPriority(EINT0_IRQn, 20);
    NVIC_SetPriority(I2C_IRQn, 10);
    
    obj.c[4] = 1;
    led = 0;

    while(1)
    {
        data = rorikon.getSumangle();
        if(data < 0.000)
        {
            obj.i = (int)(data*10)*(-1);
            obj.c[4] = 0;
            leds = 3;
        }
        else
        {
            obj.i = (int)(data*10);
            obj.c[4] = 2;
            leds = 0;
        }
    }
}