NHK2020_master_program

Dependencies:   mbed QEI

main.cpp

Committer:
skouki
Date:
2020-10-27
Revision:
1:496ab5127b06
Parent:
0:e06e8c048454
Child:
2:e2ec64c77b6e

File content as of revision 1:496ab5127b06:

#include "mbed.h"
#include "pin_config.h"
#include "QEI.h"
#include "FEP.h"
Serial pc(USBTX,USBRX,115200);
RawSerial serial(PC_10,PC_11,9600);

AnalogIn finger[]={
    AnalogIn(A_IN_1),
    AnalogIn(A_IN_2),
    AnalogIn(A_IN_3),
    AnalogIn(A_IN_4),
    AnalogIn(A_IN_5)
};

AnalogIn wrist_bent[]={
    AnalogIn(A_IN_6),
    AnalogIn(A_IN_7)
};

AnalogIn wrist_twist[]={
    AnalogIn(A_IN_8)
};

QEI elbow_bent[]={
    QEI(QEI_1_A,QEI_1_B, NC, 360,QEI::X4_ENCODING)
};

QEI shoulder_rotation[]={
    QEI(QEI_2_A,QEI_2_B, NC, 360,QEI::X4_ENCODING),
    QEI(QEI_3_A,QEI_3_B, NC, 360,QEI::X4_ENCODING)
};

FEP fep(PC_12,PD_2,003);

DigitalIn b(USER_BUTTON);

typedef struct {   
    float close_val;
    float open_val;
    float now_val;
    uint8_t percentage;
} status_t;

class status_provider{
    public:
    status_t status;
    void percentage_calculation();
};

void status_provider::percentage_calculation(){
    status.percentage = (1 - ((status.now_val - status.close_val) / (status.open_val - status.close_val))) * 255;
    //if(fabsf(status.open_val - status.close_val) >= 10.0f)return;
    if(status.open_val <= status.now_val) status.percentage = 0;
    if(status.close_val >=status.now_val) status.percentage = 255;
}


status_provider status_[11];

void update_status(int mode){
    int i;
    float val[11];
    
    for(i=0;i<5;i++)val[i] = finger[i].read();
    for(i=5;i<7;i++)val[i] = wrist_bent[i-5].read();
    for(i=7;i<8;i++)val[i] = wrist_twist[i-7].read();
    for(i=8;i<9;i++)val[i] = (float)(elbow_bent[i-8].getPulses());
    for(i=9;i<11;i++)val[i] = (float)(shoulder_rotation[i-9].getPulses());
    
    if(mode==1){
        for(i=0;i<11;i++)status_[i].status.close_val = val[i];
    }
    if(mode==2){
        for(i=0;i<11;i++)status_[i].status.open_val = val[i];
    }
    if(mode==3){
        for(i=0;i<11;i++)status_[i].status.now_val = val[i];
    }
}
int main()
{
    uint8_t *data[11];
    int i;
    
    
    for(i=0;i<11;i++)data[i] = &status_[i].status.percentage;
    update_status(1);
    while(bool first_loop=1){
        bool b_ = b;
        update_status(2);
        if(!b_){
            while(bool second_loop=1){
                update_status(3);
                for(i=0;i<11;i++){
                    status_[i].percentage_calculation();
                    /*
                    if(b.read()==0){
                        *data[8]=0;
                    }
                    else{
                        *data[8]=255;
                    }
                    */
                    
                    pc.printf("[%2d]:%3d,",i,*data[i]);
                    serial.printf("%d",*data[i]);
                }
                pc.printf("\n\r");
                serial.printf("\r\n");
                fep.sendData(data,11);
                
            }
                
        }
    }
    return 0;
}