今までのジョイスティックの入力を段階分けしていた方式から、アナログ値をできる限りそのまま使用する方式に変更しました。

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

main.cpp

Committer:
tsumagari
Date:
2016-11-25
Revision:
7:59ddbe239835
Parent:
6:7484315ba88a
Child:
8:dbc8c87dac78

File content as of revision 7:59ddbe239835:

//中央can program

#include "mbed.h"
#include "BufferedSoftSerial.h"
#define WAIT_LOOP_TIME 0.1
#define YOKUTAN_DATAS_NUM 4
#define IMPUT_DATAS_NUM 2
#define SEND_DATAS_CAN_ID 100
#define SEND_DATAS_TIME 0.15 //0.1
#define READ_INPUT_TIME 0.2

CAN can_R(p30,p29);
CAN can_L(p9,p10);
Serial pc(USBTX,USBRX);
//BufferedSoftSerial toKeikiSerial(p26,p25);
Serial toKeikiSerial(p13,p14);
DigitalIn eruron_R(p22);
DigitalIn eruron_L(p20);
DigitalIn drug_R(p23);
DigitalIn drug_L(p19);
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
//Ticker sendDatasTicker;
Ticker inputControlValuesTicker;
//Ticker testSSTicker;
AnalogIn p(p15);
AnalogIn q(p16);

char yokutanDatas_R[YOKUTAN_DATAS_NUM];
char yokutanDatas_L[YOKUTAN_DATAS_NUM];
char inputDatas_R[IMPUT_DATAS_NUM];
char inputDatas_L[IMPUT_DATAS_NUM];
char cadence = 0;
bool stateP = true;
bool stateQ = true;
bool stateP_old = true;
bool stateQ_old = true;

CANMessage recmsg_R;
CANMessage recmsg_L;

void InputControlValues(){
    inputDatas_R[1] = (char)drug_R;
    inputDatas_L[1] = (char)drug_L;
    if(eruron_R){
        inputDatas_R[0] = 0;
        inputDatas_L[0] = 2;
    }
    else if(eruron_L){
        inputDatas_R[0] = 2;
        inputDatas_L[0] = 0;
    }
    else{
        inputDatas_R[0] = 1;
        inputDatas_L[0] = 1;
    }
}

void toString_R(){
    pc.printf("R:");
    for(int i = 0; i < IMPUT_DATAS_NUM; i++){
        pc.printf("%d:%i    ",i,inputDatas_R[i]);
    }
}

void toString_L(){
    pc.printf("L:");
    for(int i = 0; i < IMPUT_DATAS_NUM; i++){
        pc.printf("%d:%i    ",i,inputDatas_L[i]);
    }
    pc.printf("\n\r");
}

void SendDatas(){
    can_R.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_R, IMPUT_DATAS_NUM));
    can_L.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_L, IMPUT_DATAS_NUM));
    for(int i = 0; i < YOKUTAN_DATAS_NUM; i++){
        toKeikiSerial.putc(yokutanDatas_R[i]);
        wait_ms(10);
        toKeikiSerial.putc(yokutanDatas_L[i]);
        wait_ms(10);
    }
    for(int i = 0; i < IMPUT_DATAS_NUM; i++){
        toKeikiSerial.putc(inputDatas_R[i]);
        wait_ms(10);
        pc.printf("%d\n\r",inputDatas_R[i]);//%cで出力すると見えない系の文字が出る
        toKeikiSerial.putc(inputDatas_L[i]);
        wait_ms(10);
        pc.printf("%d\n\r",inputDatas_L[i]);
    }
    toKeikiSerial.putc(cadence);
    wait_ms(10);
    pc.printf("test\n\r");
}
//void testSS(){
//    test.putc(50);
//    wait_ms(10);
//}
       

void init(){
    toKeikiSerial.baud(9600);
//    sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
    inputControlValuesTicker.attach(InputControlValues,READ_INPUT_TIME);
    for(int i = 0; i < IMPUT_DATAS_NUM; i++){
        inputDatas_R[i] = 0;
        inputDatas_L[i] = 0;
    }
}


void receiveDatas(){
    if(can_R.read(recmsg_R)){
        for(int i = 0; i < recmsg_R.len; i++){
            yokutanDatas_R[i] = recmsg_R.data[i];
        }
        myled1 = !myled1;
    }
     if(can_L.read(recmsg_L)){
        for(int i = 0; i < recmsg_L.len; i++){
            yokutanDatas_L[i] = recmsg_L.data[i];
        }
        myled2 = !myled2;
    }
}

int main(){
    init();
    while(1){
//        for(int i=0; i<IMPUT_DATAS_NUM; i++){
//            test.putc(inputDatas_R[i]);
//            wait(0.1);
//        }
        wait_us(10);
        receiveDatas();
        SendDatas();
        //toString_R();
//        toString_L();

        wait(WAIT_LOOP_TIME);
    }
}