taka yamanouchi
/
2019_tourobo_Master
0.5
main.cpp
- Committer:
- sink
- Date:
- 2019-11-19
- Revision:
- 0:0239d9f7bf79
File content as of revision 0:0239d9f7bf79:
#include "mbed.h" #include "define.h" #include "string" Ticker timer; RawSerial upper( p9, p10, 115200); RawSerial under( p13, p14, 115200); RawSerial con ( p28, p27, 115200); RawSerial pc( USBTX, USBRX, 115200); DigitalIn sw1(p24); DigitalIn sw2(p25); DigitalIn sw3(p26); DigitalOut led(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); //_________________________↓変数宣言 string BLE_str = ""; bool set_end = 0; bool Connected = 0; bool mldp_online = 0; bool pre_sw1 = 0, pre_sw2 = 0, pre_sw3 = 0; char x = 127, y = 127, rot = 127; char global_mode = 0b00000000; char up_recv = 0b00000000, und_recv = 0b00000000; //___________________________↓各送信処理系 void BLE_send(string send_str){ con.printf(send_str.c_str()); } void upper_send(char mode){ upper.putc(mode); upper.printf("\n"); } void under_send(string send_str){ under.putc(send_str[0]); under.putc(send_str[1]); under.putc(send_str[2]); under.putc(send_str[3]); under.printf("\n"); } //____________________________↓BLEモジュール設定 void BLE_setup(){ led2 = 1; wait(1.0); BLE_send("+\r"); wait(0.5); BLE_send("SF,1\r"); wait(0.5); BLE_send("SR,92000000\r"); wait(0.5); BLE_send("R,1\r"); wait(4.0); BLE_send("F\r"); wait(0.5); BLE_send("X\r"); wait(0.5); BLE_send("E,0,0491621AD835\r"); set_end = 1; } //________________________________↓各受信割込み void upper_recv(){ static string up_str = ""; char up_c = upper.getc(); if(up_c == '\n'){ up_recv = up_str[0]; up_str = ""; } else up_str += up_c; } void under_recv(){ led4 = 1; static string und_str = ""; static int und_co = 0; char und_c = under.getc(); if(und_c == '\n'){ und_recv = und_str[1]; und_str = ""; } else { if(und_co > 2) und_str = ""; und_str += und_c; und_co++; } } void con_recv(){ char bt_c = con.getc(); static int con_co = 0; if (bt_c == 'd' && !Connected) { BLE_str += bt_c; Connected = 1; BLE_str = ""; } if (Connected && mldp_online && bt_c == '\r'){ if (BLE_str == "Connection End"){ x = 127; y = 127; rot = 127; global_mode = EMERGENCY; Connected = 0; led = 1; } pc.printf(BLE_str.c_str()); BLE_str == ""; } if (Connected && mldp_online && bt_c == '\n' && con_co == 4){ if(BLE_str[3] == EMERGENCY){ x = 127; y = 127; rot = 127; global_mode = EMERGENCY; } else{ x = BLE_str[0]; y = BLE_str[1]; rot = BLE_str[2]; global_mode = BLE_str[3]; } BLE_str = ""; } else { if(con_co > 5){ BLE_str = ""; con_co = 0; } BLE_str += bt_c; con_co++; } } //_________________________________↓主要処理(周期割込み) void timer_warikomi(){ string und_send = ""; char up_send = 0b00000000, und_mode = 0b00000000; static int time_co = 0, power = 0; if (Connected && !mldp_online && time_co > 10) { BLE_send("I\r"); pc.printf(BLE_str.c_str()); pc.printf("MLDP_ONLINE\n"); mldp_online = 1; Connected = 1; BLE_str = ""; } else if (Connected && mldp_online){ if(global_mode == EMERGENCY){ und_mode = global_mode; up_send = global_mode; x = 127; y = 127; rot = 127; led3 = 1; led4 = 1; } else if(global_mode & AUTOMATION){ led2 = 1; x = 127; y = 127; rot = 127; und_mode |= AUTOMATION; up_send |= AUTOMATION; if(und_recv & POINTS_1){ if(up_recv & POSITIONS){ und_mode &= ~POINTS_1; und_mode |= POINTS_2; } else if(und_recv & POSITIONS) up_send |= POSITIONS; else up_send &= ~POSITIONS; }if(und_recv & POINTS_2){ if(up_recv & POSITIONS){ und_mode &= ~POINTS_2; und_mode |= POINTS_3; } else if(und_recv & POSITIONS) up_send |= POSITIONS; else up_send &= ~POSITIONS; }if(und_recv & POINTS_3){ if(up_recv & POSITIONS){ und_mode &= ~POINTS_3; } else if(und_recv & POSITIONS) up_send |= POSITIONS; else up_send &= ~POSITIONS; }else if(und_recv & POSITIONS) { und_mode |= POINTS_1; up_send |= POINTS_1; } else{ } } else{ led = 1; led2 = 0; und_mode = 0b00000000; BLE_send("\n"); if(global_mode & LOADING) up_send |= LOADING; if(global_mode & CB_COLLECT) up_send |= CB_COLLECT; else up_send &= ~CB_COLLECT; } und_send += x; und_send += y; und_send += rot; und_send += und_mode; under_send(und_send); upper_send(und_recv); pc.printf("x:%d\ty:%d\trot:%d\tmode:%d\n",und_send[0],und_send[1],und_send[2],und_recv); und_send = ""; } else { time_co++; } } //______________________________________ int main() { pre_sw1 = sw1.read(); pre_sw2 = sw2.read(); pre_sw3 = sw3.read(); BLE_setup(); while(!set_end); timer.attach(&timer_warikomi, INT_TIME); upper.attach(&upper_recv, RawSerial::RxIrq); under.attach(&upper_recv, RawSerial::RxIrq); con.attach(&con_recv, RawSerial::RxIrq); while(true) { } }