panel
Dependencies: mbed
main.cpp
00001 #include "mbed.h" 00002 #include <string> 00003 00004 using namespace std; 00005 00006 Ticker timer; 00007 00008 Serial controller_uart(PA_0,PA_1,19200); 00009 Serial ems_uart(PA_9,PB_7,19200); 00010 Serial usb_uart(USBTX,USBRX,9600); 00011 00012 DigitalOut EMS(PA_10); 00013 00014 DigitalIn ZONE(PC_5); 00015 DigitalIn PS1(PC_12); 00016 DigitalIn PS2(PA_5); 00017 DigitalIn TS1(PC_11); 00018 DigitalIn TS2(PC_10); 00019 DigitalIn TS3(PC_6); 00020 DigitalIn TS4(PC_8); 00021 00022 volatile int cnt = 0; 00023 volatile int con_status = 0; 00024 volatile unsigned char tx_data[11] = { 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00 }; 00025 volatile unsigned char dualshock_data[10] = { 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80 }; 00026 volatile unsigned char dualshock_data_number = 0; 00027 volatile unsigned char dualshock_cmd_getflag = 0; 00028 00029 //遠隔非常停止受信処理 00030 void recieve_ems(){ 00031 uint8_t rxdata = ems_uart.getc(); 00032 00033 if(rxdata == 0xEE){ 00034 cnt = 50; 00035 } 00036 } 00037 00038 void time() { 00039 if(dualshock_cmd_getflag & 0x02) { 00040 dualshock_cmd_getflag = 0; 00041 00042 tx_data[1] = 0x00; 00043 tx_data[2] = 0x00; 00044 tx_data[3] = 0x00; 00045 tx_data[4] = 0x80; 00046 tx_data[5] = 0x80; 00047 tx_data[6] = 0x80; 00048 tx_data[7] = 0x80; 00049 00050 dualshock_data[1] = 0x00; 00051 dualshock_data[2] = 0x00; 00052 dualshock_data[3] = 0x00; 00053 dualshock_data[4] = 0x80; 00054 dualshock_data[5] = 0x80; 00055 dualshock_data[6] = 0x80; 00056 dualshock_data[7] = 0x80; 00057 00058 con_status = 0; 00059 }else 00060 dualshock_cmd_getflag |= 0x02; 00061 } 00062 00063 //JETSON送信処理 00064 void send_tx_data(){ 00065 usb_uart.putc('C'); 00066 for(int i = 1; i < 9; i++){ 00067 usb_uart.putc(tx_data[i]); 00068 } 00069 usb_uart.putc('E'); 00070 } 00071 00072 //コントローラー受信処理 00073 void read_controller_data() { 00074 unsigned char rxdata; 00075 00076 rxdata = controller_uart.getc(); 00077 00078 if (dualshock_data_number == 0 && rxdata == 'S') 00079 dualshock_data_number++; 00080 else if (dualshock_data_number >= 1 && dualshock_data_number <= 7) { 00081 if (dualshock_data_number <= 3) 00082 dualshock_data[dualshock_data_number] = ~rxdata; 00083 else 00084 dualshock_data[dualshock_data_number] = rxdata; 00085 dualshock_data_number++; 00086 } 00087 else if (dualshock_data_number == 8 && rxdata == 'E') { 00088 dualshock_cmd_getflag = 0x01; 00089 for(int i = 0; i < 8; i++){ 00090 tx_data[i] = dualshock_data[i]; 00091 } 00092 con_status = 1; 00093 dualshock_data_number = 0; 00094 } 00095 } 00096 00097 //main 00098 int main(){ 00099 int c = 9; 00100 00101 ZONE.mode(PullUp); 00102 PS1.mode(PullUp); 00103 PS2.mode(PullUp); 00104 TS1.mode(PullUp); 00105 TS2.mode(PullUp); 00106 TS3.mode(PullUp); 00107 TS4.mode(PullUp); 00108 00109 timer.attach_us(&time, 100000); 00110 00111 controller_uart.attach(&read_controller_data, Serial::RxIrq); //受信割り込み 00112 ems_uart.attach(&recieve_ems, Serial::RxIrq); 00113 00114 while(1){ 00115 if(cnt){ 00116 EMS = 0; 00117 cnt--; 00118 }else{ 00119 EMS = 1; 00120 } 00121 00122 if(con_status){ 00123 tx_data[8] |= 0x80; 00124 } 00125 if(!ZONE){ 00126 tx_data[8] |= 0x40; 00127 } 00128 if(!PS1){ 00129 tx_data[8] |= 0x20; 00130 } 00131 if(!PS2){ 00132 tx_data[8] |= 0x10; 00133 } 00134 if(!TS1){ 00135 tx_data[8] |= 0x08; 00136 } 00137 if(!TS2){ 00138 tx_data[8] |= 0x04; 00139 } 00140 if(!TS3){ 00141 tx_data[8] |= 0x02; 00142 } 00143 if(!TS4){ 00144 tx_data[8] |= 0x01; 00145 } 00146 00147 if(!cnt){ 00148 send_tx_data(); 00149 tx_data[8] = 0x00; 00150 c = 9; 00151 }else{ 00152 c--; 00153 } 00154 00155 wait_ms(10); 00156 } 00157 }
Generated on Tue Dec 13 2022 05:17:18 by 1.7.2