2017年度の製作を開始します

Dependencies:   mbed mbed-rtos

Fork of Control_Main_Full_20160608 by albatross

main.cpp

Committer:
tsumagari
Date:
2017-10-21
Branch:
?????
Revision:
57:f6226219e93d
Parent:
56:b39ffd94aa54
Child:
58:0b4b842149de

File content as of revision 57:f6226219e93d:

//中央

#include "mbed.h"
#include "InputHandler.h"
//#include "rtos.h"
#define WAIT_LOOP_TIME 0.001
#define YOKUTAN_DATAS_NUM 7
#define INPUT_DATAS_NUM 8 //ここは8バイトまでしかCANでは一度に送れないため、8以下。そして、翼端コードと数字を合わせる必要あり。
#define SEND_DATAS_CAN_ID 100
#define SEND_DATAS_TIME 0.5
#define THRESHOLD_OH_VALUE 0.14
#define SAMPLE_INTERVAL 0.05

#define PITCH_PER_ROLL 1.0//pitchがrollの何倍影響するかを示す値
#define AVE_NUM 100

/*
roll入力とピッチ入力だとピッチの方が1.5倍効くように
*/

//-----------------------------------(resetInterrupt def)
//extern "C" void mbed_reset();
//InterruptIn resetPin(p22);
//Timer resetTimeCount;
//void resetInterrupt()
//{
//    while(resetPin) {
//        resetTimeCount.start();
//        if(resetTimeCount.read()>3) mbed_reset();
//    }
//    resetTimeCount.reset();
//}
//-------------------------------------------------------

CAN can_R(p30,p29);
CAN can_L(p9,p10);
Serial toKeikiSerial(p28,p27);
AnalogIn rollPin(p15);
AnalogIn pitchPin(p18);
DigitalIn drug_R(p14);
DigitalIn drug_L(p17);
DigitalIn servoOff(p26);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led4(LED4);
DigitalOut led3(LED3);
Serial pc(USBTX,USBRX);
InputCalc pitchIC;
InputCalc rollIC;
//DigitalOut fusokuControl(p25);
//Ticker sendDatasTicker;

char yokutanDatas_R[YOKUTAN_DATAS_NUM];
char yokutanDatas_L[YOKUTAN_DATAS_NUM];
char inputDatas_R[INPUT_DATAS_NUM];
char inputDatas_L[INPUT_DATAS_NUM];

CANMessage recmsg_R;
CANMessage recmsg_L;

//void tickFusoku(void const * arg){
//    while(1){
//        fusokuControl = 1;
//        wait_us(500);
//        fusokuControl = 0;
//        wait_us(4500);
//    }
//}
void SyntheRollAndPitch(double pitch,double roll,float* inputR,float* inputL)
{
    *inputR =  (pitch * PITCH_PER_ROLL - roll)/(PITCH_PER_ROLL + 1.0);
    *inputL =  (-pitch * PITCH_PER_ROLL - roll)/(PITCH_PER_ROLL + 1.0);
}

void InputControlValues()
{
    double normedPitch = pitchIC.Processing(pitchPin.read());
    double normedRoll = rollIC.Processing(rollPin.read());
    
    float inputR = 0.0;
    float inputL = 0.0;
    
    int servoV = servoOff;
    SyntheRollAndPitch(normedPitch,normedRoll,&inputR,&inputL);
    sprintf(inputDatas_R,"%5.2f%d%d",inputR,(int)drug_R,servoV);
    sprintf(inputDatas_L,"%5.2f%d%d",inputL,(int)drug_L,servoV);
    pc.printf("inR:%5.2f inL:%5.2f nrmR:%5.2f nrmL:%5.2f sMax:%5.2f sMin:%5.2f\n\r",inputR,inputL,normedPitch,normedRoll,rollIC.shiftedMax,rollIC.shiftedMin);

    //inputDatas_R[sizeof(float)] = (char)drug_R;
    //inputDatas_L[sizeof(float)] = (char)drug_L;
    // for(int i = 0; i< 7; i++)
//        pc.printf("%c",inputDatas_R[i]);
// pc.printf("\n\r");
    //pc.printf("%d",(int)drug_R);

    led4 =! led4;
}

void SendDatas()
{
    can_R.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_R, INPUT_DATAS_NUM));
    can_L.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_L, INPUT_DATAS_NUM));
    toKeikiSerial.putc(';');
    for(int i = 0; i < YOKUTAN_DATAS_NUM; i++) {
        toKeikiSerial.putc(yokutanDatas_R[i]);
    }
    for(int i = 0; i < YOKUTAN_DATAS_NUM; i++) {
        toKeikiSerial.putc(yokutanDatas_L[i]);
    }
    for(int i = 0; i < INPUT_DATAS_NUM; i++) {
        toKeikiSerial.putc(inputDatas_R[i]);
    }
    for(int i = 0; i < INPUT_DATAS_NUM; i++) {
        toKeikiSerial.putc(inputDatas_L[i]);
    }
}

void init()
{
//--------------------------------------(resetInterrupt init)
    //resetPin.rise(resetInterrupt);
   // resetPin.mode(PullDown);
//-----------------------------------------------------------
//    sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
    servoOff.mode(PullDown);
    for(int i = 0; i < INPUT_DATAS_NUM; i++) {
        inputDatas_R[i] = 0;
        inputDatas_L[i] = 0;
    }
}



int main()
{
//    Thread tickFusokuThread(&tickFusoku);
    init();
    pitchIC.setNeutral(pitchPin.read());
    rollIC.setNeutral(rollPin.read());
    while(1) {

        InputControlValues();
        wait_us(5);
//        receiveDatas();
        SendDatas();
        wait(WAIT_LOOP_TIME);
    }
}