相互通信動くやつ、ドライバー

Dependencies:   mbed

main.cpp

Committer:
taurin
Date:
2016-01-23
Revision:
9:8004a5b72777
Parent:
2:41445b778ae0

File content as of revision 9:8004a5b72777:

//中央操舵プログラム
#include "mbed.h"

#define WAIT_LOOP_TIME 0.15

Serial rs485R(p9,p10);
Serial rs485L(p13,p14);
Serial toKeikiSerial(p28,p27);
Serial pc(USBTX,USBRX);
DigitalOut DriverR(p5);
DigitalOut DriverL(p6);
Ticker CheckDataR;
Ticker CheckDataL;
DigitalIn eruronR(p7);
DigitalIn drugR(p8);
DigitalIn eruronL(p30);
DigitalIn drugL(p29);

signed char accR[3] = {0,0,0};
signed char accL[3] = {0,0,0};

signed char VR = 0;
signed char CR = 0;
signed char VL = 0;
signed char CL = 0;

void ch_dataR(){
    rs485R.putc('C');
    wait_ms(1);
    DriverR = 0;
    wait_ms(3);
    while(rs485R.readable()) {
    short ch = rs485R.getc();
        switch(ch) {
            case 'X':
                accR[0] = rs485R.getc();
                break;
            case 'Y':
                accR[1] = rs485R.getc();
                break;
            case 'Z':
                accR[2] = rs485R.getc();
                break;
            case 'V':
                VR = rs485R.getc();
                break;
            case 'I':
                CR = rs485R.getc();
                break;
            default:
                break;
        }
    }
    DriverR = 1;
    wait_ms(1);
}

void ch_dataL(){
    rs485L.putc('C');
    wait_ms(1);
    DriverL = 0;
    wait_ms(3);
    while(rs485L.readable()) {
    short ch = rs485L.getc();
        switch(ch) {
            case 'X':
                accL[0] = rs485L.getc();
                break;
            case 'Y':
                accL[1] = rs485L.getc();
                break;
            case 'Z':
                accL[2] = rs485L.getc();
                break;
            case 'V':
                VL = rs485L.getc();
                break;
            case 'I':
                CL = rs485L.getc();
                break;
            default:
                break;
        }
    }
    DriverL = 1;
    wait_ms(1);
}

void CALL_chDataR(){
    ch_dataR();
}

void CALL_chDataL(){
    ch_dataL();
}

void init(){
    DriverR = 1;
    DriverL = 1;
    rs485R.baud(38400);
    rs485L.baud(38400);
    toKeikiSerial.baud(38400);
    CheckDataR.attach(&CALL_chDataR,0.25);
    wait(0.1);
    CheckDataL.attach(&CALL_chDataL,0.25);
}

void InputAndSentControlValuesR(){
    DriverR = 1;
    rs485R.putc('A');
    rs485R.putc(eruronR);
    rs485R.putc('B');
    rs485R.putc(drugR);    
}

void InputAndSentControlValuesL(){
    DriverL = 1;
    rs485L.putc('A');
    rs485L.putc(eruronL);
    rs485L.putc('B');
    rs485L.putc(drugL);    
}

void SendDarasToKeiki(){
    for(int i = 0; i < 3; i++){
        toKeikiSerial.putc(accR[i]);
        toKeikiSerial.putc(accL[i]);
    }
    toKeikiSerial.putc(VR);
    toKeikiSerial.putc(VL);
    toKeikiSerial.putc(CR);
    toKeikiSerial.putc(CL);
    toKeikiSerial.putc(eruronR);
    toKeikiSerial.putc(eruronL);
    toKeikiSerial.putc(drugR);
    toKeikiSerial.putc(drugL);
}

int main()
{
    init();
    while(1) {
        InputAndSentControlValuesR();
        InputAndSentControlValuesL();
        SendDarasToKeiki();
        wait(WAIT_LOOP_TIME);
    }
}