2022_NHK_B_canTR for 2022_NHK_B

Dependencies:   ikarashiCAN mbed

Dependents:   2022_NHK_B_sub1 2022_NHK_B_UK 2022_NHK_B_sub2

can_tr.h

Committer:
ikarashikota
Date:
2022-10-08
Revision:
0:dffb20a486f8
Child:
1:bbdfe8c4a57f

File content as of revision 0:dffb20a486f8:


#include "mbed.h"
#include "ikarashiCAN.h"
#include "pinconfig.h"

ikarashiCAN icanR(canrRD, canrTD, 1);
ikarashiCAN icanT(cantRD, cantTD, 2);

/*センサ及びアクチュエータの変数*/
double motorSpeed[16];
int encoderValue[12];
uint8_t b[8];
int16_t stick[4];
double jyroValue;
/*************************/

int recievedMotorSpeed[16];
int recievedJyroValue = 0;
int sendCnt = 1;


void canAllReset()
{
    for(int i=0; i<16; i++) {
        motorSpeed[i] = 0;
        recievedMotorSpeed[i] = 0;
        if(i < 12) encoderValue[i] = 0;
        if(i < 8) b[i] = 0;
        if(i < 4) stick[i] = 0;
    }
    recievedJyroValue = 0;
}

void canAllRecieve()
{
    if(icanR.checkReciever()) {
        for(int i=0; i<16; i++) {
            //モーターの各値を取得
            icanR.ifOriginalGet(recievedMotorSpeed[i], i+1);
            motorSpeed[i] = recievedMotorSpeed[i];
            motorSpeed[i] /= 10;


            //エンコーダの各値を取得
            if(i < 12) {
                icanR.ifOriginalGet(encoderValue[i], i+16+1);
            }

            //コントローラーのボタンの値を取得
            if(i < 8) {
                icanR.ifOriginalGet(b[i], i+29);
            }

            //コントローラーのスティックの値を取得
            //左Y軸[0] X軸[1]、 右Y軸[2] X軸[3]
            if(i < 4) {
                icanR.ifOriginalGet(stick[i], i+37);
            }
        }
        //ジャイロの値を取得
        icanR.ifOriginalGet(recievedJyroValue, 41);
        jyroValue = recievedJyroValue;
        jyroValue /= 10000;
    }
}

void canAllSet()
{
    if(sendCnt >= 41) {
        icanT.setData((int)(jyroValue * 10000));
        icanT.originalSet(41);
        sendCnt = 1;
    } else if(sendCnt >= 37) {
        icanT.setData(stick[sendCnt - 37]);
        icanT.originalSet(sendCnt);
    } else if(sendCnt >= 29) {
        icanT.setData(b[sendCnt - 29]);
        icanT.originalSet(sendCnt);
    } else if(sendCnt >= 17) {
        icanT.setData(encoderValue[sendCnt - 17]);
        icanT.originalSet(sendCnt);
    } else {
        icanT.setData((int)(motorSpeed[sendCnt - 1] * 10));
        icanT.originalSet(sendCnt);
    }
    sendCnt++;
}

/*********************/
void canTR(){
    canAllSet();
    icanT.send();
    icanR.recieve();   
    canAllRecieve();
}
/*********************/