taka yamanouchi
/
2019_tourobo_Master
0.5
Revision 0:0239d9f7bf79, committed 2019-11-19
- Comitter:
- sink
- Date:
- Tue Nov 19 09:41:50 2019 +0000
- Commit message:
- feild
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/define.h Tue Nov 19 09:41:50 2019 +0000 @@ -0,0 +1,11 @@ +#define INT_TIME 0.05 + +#define CB_COLLECT 0b00000001 +#define AUTOMATION 0b00000010 + +#define LOADING 0b00000100 +#define POINTS_1 0b00001000 +#define POINTS_2 0b00010000 +#define POINTS_3 0b00100000 +#define POSITIONS 0b10000000 +#define EMERGENCY 0b01000000 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Nov 19 09:41:50 2019 +0000 @@ -0,0 +1,247 @@ +#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) { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Nov 19 09:41:50 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file