MCP3204をSTM303K8T6で同時に6個使ってみた

Dependencies:   mbed 24LC1025 MCP3204

main.cpp

Committer:
sashida_h
Date:
2020-08-05
Revision:
2:133b3bf22850
Parent:
1:717563cb9070
Child:
3:99c659d89698

File content as of revision 2:133b3bf22850:

#include "mbed.h"
#include "MCP3204.h"

Serial pc(PA_2, PA_3, 115200); //pin19,20 TX,RX
CAN can(PA_11, PA_12,100000); //pin21,22 rd,td
SPI spi(PA_7, PA_6, PA_5);
MCP3204 mcp1(spi,PB_0); //下z-
MCP3204 mcp2(spi,PB_1); //右x+
MCP3204 mcp3(spi,PB_3); //左x-
MCP3204 mcp4(spi,PA_8); // 前y+
MCP3204 mcp5(spi,PA_10); //上z+
MCP3204 mcp6(spi,PF_0); //後y-

CANMessage msg;

#define T 0.03

union Float2Byte{
    float _float;
    char _byte[4];
};
typedef union Float2Byte Float2Byte;

void send(float senddata,int id){
    //pc.printf("Master send()\n\r");
    
    /*ID: 0x01*/
    Float2Byte sendFloat;
    sendFloat._float = senddata;
    //ここに送りたい値を入れる.
    
    char serialData[4];
    for(int i=0;i<4;++i){
        serialData[i] = sendFloat._byte[i];
        //pc.printf("send_char: %d\n\r", serialData[i]);
    }
    //pc.printf("sendFloat: %f\n\r", sendFloat._float);
    if(can.write(CANMessage(id, serialData, 4))){
        //pc.printf("Send.\n\r");
    } 
}

void receive(){
    Float2Byte getFloat;
    
    if(can.read(msg)){
        /*ID: 0x01*/
        if(msg.id == 0x01){
            //pc.printf("ID: 0x01\n\r");
            for(int i=0;i<4;++i){
                getFloat._byte[i] = msg.data[i];
                //pc.printf("get_char: %d\n\r", getFloat._byte[i]);
            }
            pc.printf("world_time:%.2f\r\n", getFloat._float);
        }
        
        if(msg.id == 0x03){
            //pc.printf("ID: 0x01\n\r");
            for(int i=0;i<4;++i){
                getFloat._byte[i] = msg.data[i];
                //pc.printf("get_char: %d\n\r", getFloat._byte[i]);
            }
            pc.printf("ID0x03:%.2f\r\n", getFloat._float);
        }
    }
    
}

int main(){
    int adc1[4],adc2[4],adc3[4],adc4[4],adc5[4],adc6[4];
    int i,j,cnt;
    float ave[6],buff;
    
    can.attach(receive, CAN::RxIrq);
    pc.printf("Hello world\r\n");
    wait(1.0);
    
    while(1){
        adc1[0] = mcp1.sgl( CH0 );
        adc1[1] = mcp1.sgl( CH1 );
        adc1[2] = mcp1.sgl( CH2 );
        adc1[3] = mcp1.sgl( CH3 );
        for(i=0;i<4-1;i++){
            for(j=1;j<4-i;j++){
                if(adc1[j-1] > adc1[j]){
                    buff = adc1[j-1];
                    adc1[j-1] = adc1[j];
                    adc1[j] = buff;
                }
            }
        }
        //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
        ave[0] = (adc1[1] + adc1[2])/2.0 + 120.0;
        
        adc2[0] = mcp2.sgl( CH0 );
        adc2[1] = mcp2.sgl( CH1 );
        adc2[2] = mcp2.sgl( CH2 );
        adc2[3] = mcp2.sgl( CH3 );
        for(i=0;i<4-1;i++){
            for(j=1;j<4-i;j++){
                if(adc2[j-1] > adc2[j]){
                    buff = adc2[j-1];
                    adc2[j-1] = adc2[j];
                    adc2[j] = buff;
                }
            }
        }
        //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
        ave[1] = (adc2[1] + adc2[2])/2.0;
        
        adc3[0] = mcp3.sgl( CH0 );
        adc3[1] = mcp3.sgl( CH1 );
        adc3[2] = mcp3.sgl( CH2 );
        adc3[3] = mcp3.sgl( CH3 );
        for(i=0;i<4-1;i++){
            for(j=1;j<4-i;j++){
                if(adc3[j-1] > adc3[j]){
                    buff = adc3[j-1];
                    adc3[j-1] = adc3[j];
                    adc3[j] = buff;
                }
            }
        }
        //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
        ave[2] = (adc3[1] + adc3[2])/2.0 + 70.0;
        
        adc4[0] = mcp4.sgl( CH0 );
        adc4[1] = mcp4.sgl( CH1 );
        adc4[2] = mcp4.sgl( CH2 );
        adc4[3] = mcp4.sgl( CH3 );
        for(i=0;i<4-1;i++){
            for(j=1;j<4-i;j++){
                if(adc4[j-1] > adc4[j]){
                    buff = adc4[j-1];
                    adc4[j-1] = adc4[j];
                    adc4[j] = buff;
                }
            }
        }
        //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
        ave[3] = (adc4[1] + adc4[2])/2.0 + 55.0;
        
        adc5[0] = mcp5.sgl( CH0 );
        adc5[1] = mcp5.sgl( CH1 );
        adc5[2] = mcp5.sgl( CH2 );
        adc5[3] = mcp5.sgl( CH3 );
        for(i=0;i<4-1;i++){
            for(j=1;j<4-i;j++){
                if(adc5[j-1] > adc5[j]){
                    buff = adc5[j-1];
                    adc5[j-1] = adc5[j];
                    adc5[j] = buff;
                }
            }
        }
        //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
        ave[4] = (adc5[1] + adc5[2])/2.0;
        
        adc6[0] = mcp6.sgl( CH0 );
        adc6[1] = mcp6.sgl( CH1 );
        adc6[2] = mcp6.sgl( CH2 );
        adc6[3] = mcp6.sgl( CH3 );
        for(i=0;i<4-1;i++){
            for(j=1;j<4-i;j++){
                if(adc6[j-1] > adc6[j]){
                    buff = adc6[j-1];
                    adc6[j-1] = adc6[j];
                    adc6[j] = buff;
                }
            }
        }
        //pc.printf("%d,%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2],adc1[3]);
        ave[5] = (adc6[1] + adc6[2])/2.0 - 100.0;
        
        /*
        pc.printf("1");
        for(i=0; i<4; i++){
            //pc.printf("CH%d:%d\r\n",i,adc1[i]);
            pc.printf(",%d",adc1[i]);
        }
        pc.printf(",%.1f\r\n", ave1);
        
        pc.printf("2");
        for(i=0; i<4; i++){
            //pc.printf("CH%d:%d\r\n",i,adc1[i]);
            pc.printf(",%d",adc2[i]);
        }
        pc.printf(",%.1f\r\n", ave2);
        
        pc.printf("3");
        for(i=0; i<4; i++){
            //pc.printf("CH%d:%d\r\n",i,adc1[i]);
            pc.printf(",%d",adc3[i]);
        }
        pc.printf(",%.1f\r\n", ave3);
        
        pc.printf("4");
        for(i=0; i<4; i++){
            //pc.printf("CH%d:%d\r\n",i,adc1[i]);
            pc.printf(",%d",adc4[i]);
        }
        pc.printf(",%.1f\r\n", ave4);
        
        pc.printf("5");
        for(i=0; i<4; i++){
            //pc.printf("CH%d:%d\r\n",i,adc1[i]);
            pc.printf(",%d",adc5[i]);
        }
        pc.printf(",%.1f\r\n", ave5);
        
        pc.printf("6");
        for(i=0; i<4; i++){
            //pc.printf("CH%d:%d\r\n",i,adc1[i]);
            pc.printf(",%d",adc6[i]);
        }
        pc.printf(",%.1f\r\n", ave6);
        */
        
        cnt = 0;
             if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:0\r\n");
        //else if(ave[1] < ave[2] && ave[3] < ave[5] && ave[4] < ave[0])pc.printf("x:90,y:0,z:0\r\n");
        else if(ave[1] < ave[2] && ave[3] < ave[5] && ave[4] > ave[0])pc.printf("x:180,y:0,z:0\r\n");
        //else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:270,y:0,z:0\r\n");

        else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:0\r\n");
        //else if(ave[1] < ave[2] && ave[3] < ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:90\r\n");
        else if(ave[1] > ave[2] && ave[3] < ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:180\r\n");
        //else if(ave[1] > ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:270\r\n");
        
        else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] < ave[0])pc.printf("x:0,y:0,z:0\r\n");
        //else if(ave[1] < ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:0,y:90,z:0\r\n");
        else if(ave[1] > ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:0,y:180,z:0\r\n");
        //else if(ave[1] > ave[2] && ave[3] > ave[5] && ave[4] > ave[0])pc.printf("x:0,y:270,z:0\r\n");
        
        else pc.printf("none\r\n");
        
            
        
        pc.printf("%.1f,%.1f,%.1f,%.1f,%.1f,%.1f\r\n",ave[1],ave[2],ave[3],ave[5],ave[4],ave[0]);
        
        
        wait(0.5);
    }
    
}

/*
int main(){
    int adc[4];
    int i;
    
    pc.printf("Hello world\r\n");
    wait(1.0);
    
    while(1){
        adc[0] = mcp.sgl( CH0 );
        adc[1] = mcp.sgl( CH1 );
        adc[2] = mcp.sgl( CH2 );
        adc[3] = mcp.sgl( CH3 );
        for(i=0; i<4; i++){
            pc.printf("CH%d:%d\r\n",i,adc[i]);
        }
        wait(0.5);
    }

}
*/