Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
communicate.h@0:b613dc16f27d, 2015-10-28 (annotated)
- Committer:
- DeguNaoto
- Date:
- Wed Oct 28 09:03:19 2015 +0000
- Revision:
- 0:b613dc16f27d
- Child:
- 5:0e6dd1ff3ff2
20151028 Ticker??????
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| DeguNaoto | 0:b613dc16f27d | 1 | /***RS485 Communication.***/ |
| DeguNaoto | 0:b613dc16f27d | 2 | #define RS485_TX p13 |
| DeguNaoto | 0:b613dc16f27d | 3 | #define RS485_RX p14 |
| DeguNaoto | 0:b613dc16f27d | 4 | Serial RS485(RS485_TX, RS485_RX); |
| DeguNaoto | 0:b613dc16f27d | 5 | #define EnablePin p7 |
| DeguNaoto | 0:b613dc16f27d | 6 | DigitalOut Enable(EnablePin); |
| DeguNaoto | 0:b613dc16f27d | 7 | inline void initializeRS485(){ |
| DeguNaoto | 0:b613dc16f27d | 8 | RS485.format(8,Serial::Even); |
| DeguNaoto | 0:b613dc16f27d | 9 | } |
| DeguNaoto | 0:b613dc16f27d | 10 | |
| DeguNaoto | 0:b613dc16f27d | 11 | /* |
| DeguNaoto | 0:b613dc16f27d | 12 | inline void sendData(int address, int data5) { |
| DeguNaoto | 0:b613dc16f27d | 13 | unsigned int data; |
| DeguNaoto | 0:b613dc16f27d | 14 | if (data5 <= 31) { |
| DeguNaoto | 0:b613dc16f27d | 15 | data = ((address << 5) | data5); |
| DeguNaoto | 0:b613dc16f27d | 16 | RS485.putc(data); |
| DeguNaoto | 0:b613dc16f27d | 17 | } |
| DeguNaoto | 0:b613dc16f27d | 18 | } |
| DeguNaoto | 0:b613dc16f27d | 19 | */ |
| DeguNaoto | 0:b613dc16f27d | 20 | |
| DeguNaoto | 0:b613dc16f27d | 21 | inline void sendData(int address, unsigned int data8) { |
| DeguNaoto | 0:b613dc16f27d | 22 | unsigned int data; |
| DeguNaoto | 0:b613dc16f27d | 23 | if (data8 <= 15) { |
| DeguNaoto | 0:b613dc16f27d | 24 | data = 128 | (address << 4) | (data8 & 15); |
| DeguNaoto | 0:b613dc16f27d | 25 | RS485.putc(data); |
| DeguNaoto | 0:b613dc16f27d | 26 | } |
| DeguNaoto | 0:b613dc16f27d | 27 | else if (data8 <= 255 && data8 >= 16) { |
| DeguNaoto | 0:b613dc16f27d | 28 | data = (address << 4) | (data8 >> 4); |
| DeguNaoto | 0:b613dc16f27d | 29 | RS485.putc(data); |
| DeguNaoto | 0:b613dc16f27d | 30 | wait(0.000001); |
| DeguNaoto | 0:b613dc16f27d | 31 | data = 128 | (address << 4) | (data8 & 15); |
| DeguNaoto | 0:b613dc16f27d | 32 | RS485.putc(data); |
| DeguNaoto | 0:b613dc16f27d | 33 | } |
| DeguNaoto | 0:b613dc16f27d | 34 | } |
| DeguNaoto | 0:b613dc16f27d | 35 | |
| DeguNaoto | 0:b613dc16f27d | 36 | |
| DeguNaoto | 0:b613dc16f27d | 37 | #ifdef IM920 |
| DeguNaoto | 0:b613dc16f27d | 38 | /***IM920 Communication.***/ |
| DeguNaoto | 0:b613dc16f27d | 39 | char rcvBUFF_IM920[40], rcvBUFF_SBDBT[40]; |
| DeguNaoto | 0:b613dc16f27d | 40 | int rcvCOUNT_IM920 = 0, rcvCOUNT_SBDBT = 0; |
| DeguNaoto | 0:b613dc16f27d | 41 | int rcvFLAG = 0; |
| DeguNaoto | 0:b613dc16f27d | 42 | int sendFLAG = 0; |
| DeguNaoto | 0:b613dc16f27d | 43 | int deadCOUNT = 0; |
| DeguNaoto | 0:b613dc16f27d | 44 | int deadflag = 0; |
| DeguNaoto | 0:b613dc16f27d | 45 | int oldDATA; |
| DeguNaoto | 0:b613dc16f27d | 46 | unsigned int cm, a2, b, X, Y; |
| DeguNaoto | 0:b613dc16f27d | 47 | unsigned int sendDATA = 0; |
| DeguNaoto | 0:b613dc16f27d | 48 | unsigned long outDATA[4]; |
| DeguNaoto | 0:b613dc16f27d | 49 | |
| DeguNaoto | 0:b613dc16f27d | 50 | Serial IM920_USART(p9, p10); |
| DeguNaoto | 0:b613dc16f27d | 51 | Serial SBDBT_USART(p28, p27); |
| DeguNaoto | 0:b613dc16f27d | 52 | DigitalIn BUSY(p8); |
| DeguNaoto | 0:b613dc16f27d | 53 | |
| DeguNaoto | 0:b613dc16f27d | 54 | Ticker DTimer; |
| DeguNaoto | 0:b613dc16f27d | 55 | |
| DeguNaoto | 0:b613dc16f27d | 56 | void DEVICE_TX(int DATA, int DEVICE = 0) { |
| DeguNaoto | 0:b613dc16f27d | 57 | char sDATA[2]; |
| DeguNaoto | 0:b613dc16f27d | 58 | if (DATA <= 15) |
| DeguNaoto | 0:b613dc16f27d | 59 | sprintf(sDATA, "0%X", DATA); |
| DeguNaoto | 0:b613dc16f27d | 60 | else |
| DeguNaoto | 0:b613dc16f27d | 61 | sprintf(sDATA, "%X", DATA); |
| DeguNaoto | 0:b613dc16f27d | 62 | |
| DeguNaoto | 0:b613dc16f27d | 63 | if (DEVICE == 1) { |
| DeguNaoto | 0:b613dc16f27d | 64 | IM920_USART.printf("TXDA %s\r\n", sDATA); |
| DeguNaoto | 0:b613dc16f27d | 65 | } |
| DeguNaoto | 0:b613dc16f27d | 66 | else if (DEVICE == 2) { |
| DeguNaoto | 0:b613dc16f27d | 67 | SBDBT_USART.printf("00000000000%s\r\n", sDATA); |
| DeguNaoto | 0:b613dc16f27d | 68 | } |
| DeguNaoto | 0:b613dc16f27d | 69 | else { |
| DeguNaoto | 0:b613dc16f27d | 70 | IM920_USART.printf("TXDA %s\r\n", sDATA); |
| DeguNaoto | 0:b613dc16f27d | 71 | SBDBT_USART.printf("00000000000%s\r\n", sDATA); |
| DeguNaoto | 0:b613dc16f27d | 72 | } |
| DeguNaoto | 0:b613dc16f27d | 73 | } |
| DeguNaoto | 0:b613dc16f27d | 74 | |
| DeguNaoto | 0:b613dc16f27d | 75 | int cvsendDATA(int Buzzer, int LED) { |
| DeguNaoto | 0:b613dc16f27d | 76 | /* |
| DeguNaoto | 0:b613dc16f27d | 77 | if (Buzzer > 1) |
| DeguNaoto | 0:b613dc16f27d | 78 | Buzzer = 1; |
| DeguNaoto | 0:b613dc16f27d | 79 | else if (Buzzer < 0) |
| DeguNaoto | 0:b613dc16f27d | 80 | Buzzer = 0; |
| DeguNaoto | 0:b613dc16f27d | 81 | if (LED < 0) |
| DeguNaoto | 0:b613dc16f27d | 82 | LED = 0; |
| DeguNaoto | 0:b613dc16f27d | 83 | else if (LED >= 16) |
| DeguNaoto | 0:b613dc16f27d | 84 | LED = 15; |
| DeguNaoto | 0:b613dc16f27d | 85 | */ |
| DeguNaoto | 0:b613dc16f27d | 86 | Buzzer = 0; |
| DeguNaoto | 0:b613dc16f27d | 87 | LED = 0; |
| DeguNaoto | 0:b613dc16f27d | 88 | return (Buzzer << 6) | (LED << 2); |
| DeguNaoto | 0:b613dc16f27d | 89 | } |
| DeguNaoto | 0:b613dc16f27d | 90 | |
| DeguNaoto | 0:b613dc16f27d | 91 | void cvrecvDATA(char *buffDATA, unsigned long *outputDATA) { |
| DeguNaoto | 0:b613dc16f27d | 92 | char s1[2], s2[2], s3[2], s4[2]; |
| DeguNaoto | 0:b613dc16f27d | 93 | strncpy(s1, buffDATA+11, 2); |
| DeguNaoto | 0:b613dc16f27d | 94 | strncpy(s2, buffDATA+14, 2); |
| DeguNaoto | 0:b613dc16f27d | 95 | strncpy(s3, buffDATA+17, 2); |
| DeguNaoto | 0:b613dc16f27d | 96 | strncpy(s4, buffDATA+20, 2); |
| DeguNaoto | 0:b613dc16f27d | 97 | outputDATA[0] = strtoul(s1, (char **) NULL, 16); |
| DeguNaoto | 0:b613dc16f27d | 98 | outputDATA[1] = strtoul(s2, (char **) NULL, 16); |
| DeguNaoto | 0:b613dc16f27d | 99 | outputDATA[2] = strtoul(s3, (char **) NULL, 16); |
| DeguNaoto | 0:b613dc16f27d | 100 | outputDATA[3] = strtoul(s4, (char **) NULL, 16); |
| DeguNaoto | 0:b613dc16f27d | 101 | } |
| DeguNaoto | 0:b613dc16f27d | 102 | |
| DeguNaoto | 0:b613dc16f27d | 103 | void cvrecvDATAsbdbt(char *buffDATA, unsigned long *outputDATA) { |
| DeguNaoto | 0:b613dc16f27d | 104 | char s1[2], s2[2]; |
| DeguNaoto | 0:b613dc16f27d | 105 | strncpy(s1, buffDATA+5, 2); |
| DeguNaoto | 0:b613dc16f27d | 106 | strncpy(s2, buffDATA+7, 2); |
| DeguNaoto | 0:b613dc16f27d | 107 | outputDATA[0] = strtoul(s1, (char **) NULL, 16); |
| DeguNaoto | 0:b613dc16f27d | 108 | outputDATA[1] = strtoul(s2, (char **) NULL, 16); |
| DeguNaoto | 0:b613dc16f27d | 109 | } |
| DeguNaoto | 0:b613dc16f27d | 110 | |
| DeguNaoto | 0:b613dc16f27d | 111 | void readDATA(unsigned long* outDATA) { |
| DeguNaoto | 0:b613dc16f27d | 112 | cm = (outDATA[0] & 128) >> 7; |
| DeguNaoto | 0:b613dc16f27d | 113 | a2 = (outDATA[0] & 64) >> 6; |
| DeguNaoto | 0:b613dc16f27d | 114 | X = (outDATA[0] & 56) >> 3; |
| DeguNaoto | 0:b613dc16f27d | 115 | Y = outDATA[0] & 7; |
| DeguNaoto | 0:b613dc16f27d | 116 | b = outDATA[1]; |
| DeguNaoto | 0:b613dc16f27d | 117 | } |
| DeguNaoto | 0:b613dc16f27d | 118 | |
| DeguNaoto | 0:b613dc16f27d | 119 | void SBDBT_RX() { |
| DeguNaoto | 0:b613dc16f27d | 120 | char rcvDATA; |
| DeguNaoto | 0:b613dc16f27d | 121 | rcvDATA = SBDBT_USART.getc(); |
| DeguNaoto | 0:b613dc16f27d | 122 | rcvBUFF_SBDBT[rcvCOUNT_SBDBT] = rcvDATA; |
| DeguNaoto | 0:b613dc16f27d | 123 | rcvCOUNT_SBDBT++; |
| DeguNaoto | 0:b613dc16f27d | 124 | if (rcvDATA == 0x0A) { |
| DeguNaoto | 0:b613dc16f27d | 125 | rcvCOUNT_SBDBT = 0; |
| DeguNaoto | 0:b613dc16f27d | 126 | rcvFLAG = 2; |
| DeguNaoto | 0:b613dc16f27d | 127 | } |
| DeguNaoto | 0:b613dc16f27d | 128 | else if (rcvCOUNT_SBDBT >= 40) { |
| DeguNaoto | 0:b613dc16f27d | 129 | rcvCOUNT_SBDBT = 0; |
| DeguNaoto | 0:b613dc16f27d | 130 | memset(rcvBUFF_SBDBT, '\0', 40); |
| DeguNaoto | 0:b613dc16f27d | 131 | } |
| DeguNaoto | 0:b613dc16f27d | 132 | } |
| DeguNaoto | 0:b613dc16f27d | 133 | |
| DeguNaoto | 0:b613dc16f27d | 134 | void IM920_RX() { |
| DeguNaoto | 0:b613dc16f27d | 135 | char rcvDATA; |
| DeguNaoto | 0:b613dc16f27d | 136 | rcvDATA = IM920_USART.getc(); |
| DeguNaoto | 0:b613dc16f27d | 137 | rcvBUFF_IM920[rcvCOUNT_IM920] = rcvDATA; |
| DeguNaoto | 0:b613dc16f27d | 138 | rcvCOUNT_IM920++; |
| DeguNaoto | 0:b613dc16f27d | 139 | if (rcvDATA == 0x0A) { |
| DeguNaoto | 0:b613dc16f27d | 140 | rcvCOUNT_IM920 = 0; |
| DeguNaoto | 0:b613dc16f27d | 141 | rcvFLAG = 1; |
| DeguNaoto | 0:b613dc16f27d | 142 | } |
| DeguNaoto | 0:b613dc16f27d | 143 | else if (rcvCOUNT_IM920 >= 40) { |
| DeguNaoto | 0:b613dc16f27d | 144 | rcvCOUNT_IM920 = 0; |
| DeguNaoto | 0:b613dc16f27d | 145 | memset(rcvBUFF_IM920, '\0', 40); |
| DeguNaoto | 0:b613dc16f27d | 146 | } |
| DeguNaoto | 0:b613dc16f27d | 147 | } |
| DeguNaoto | 0:b613dc16f27d | 148 | |
| DeguNaoto | 0:b613dc16f27d | 149 | void deadCheck() { |
| DeguNaoto | 0:b613dc16f27d | 150 | if (rcvFLAG == 0 && deadCOUNT >= 5) { |
| DeguNaoto | 0:b613dc16f27d | 151 | deadflag = 1; |
| DeguNaoto | 0:b613dc16f27d | 152 | deadCOUNT = 0; |
| DeguNaoto | 0:b613dc16f27d | 153 | } |
| DeguNaoto | 0:b613dc16f27d | 154 | else if (rcvFLAG == 0 && deadCOUNT >= 2) { |
| DeguNaoto | 0:b613dc16f27d | 155 | deadCOUNT++; |
| DeguNaoto | 0:b613dc16f27d | 156 | DEVICE_TX(sendDATA); |
| DeguNaoto | 0:b613dc16f27d | 157 | } |
| DeguNaoto | 0:b613dc16f27d | 158 | else if (rcvFLAG == 0) { |
| DeguNaoto | 0:b613dc16f27d | 159 | deadCOUNT++; |
| DeguNaoto | 0:b613dc16f27d | 160 | } |
| DeguNaoto | 0:b613dc16f27d | 161 | sendDATA = cvsendDATA(0, 0); |
| DeguNaoto | 0:b613dc16f27d | 162 | } |
| DeguNaoto | 0:b613dc16f27d | 163 | |
| DeguNaoto | 0:b613dc16f27d | 164 | inline void initializeIM920(){ |
| DeguNaoto | 0:b613dc16f27d | 165 | IM920_USART.baud(9600); |
| DeguNaoto | 0:b613dc16f27d | 166 | IM920_USART.format(8, Serial::None, 1); |
| DeguNaoto | 0:b613dc16f27d | 167 | IM920_USART.attach(IM920_RX, Serial::RxIrq); |
| DeguNaoto | 0:b613dc16f27d | 168 | SBDBT_USART.baud(9600); |
| DeguNaoto | 0:b613dc16f27d | 169 | SBDBT_USART.format(8, Serial::None, 1); |
| DeguNaoto | 0:b613dc16f27d | 170 | SBDBT_USART.attach(SBDBT_RX, Serial::RxIrq); |
| DeguNaoto | 0:b613dc16f27d | 171 | DTimer.attach(deadCheck, 0.3); |
| DeguNaoto | 0:b613dc16f27d | 172 | sendDATA = cvsendDATA(0, 0); |
| DeguNaoto | 0:b613dc16f27d | 173 | } |
| DeguNaoto | 0:b613dc16f27d | 174 | |
| DeguNaoto | 0:b613dc16f27d | 175 | inline void readIM920(){ |
| DeguNaoto | 0:b613dc16f27d | 176 | if (rcvFLAG == 1) { |
| DeguNaoto | 0:b613dc16f27d | 177 | if (strlen(rcvBUFF_IM920) > 8) { |
| DeguNaoto | 0:b613dc16f27d | 178 | cvrecvDATA(rcvBUFF_IM920, outDATA); |
| DeguNaoto | 0:b613dc16f27d | 179 | readDATA(outDATA); |
| DeguNaoto | 0:b613dc16f27d | 180 | deadCOUNT = 0; |
| DeguNaoto | 0:b613dc16f27d | 181 | deadflag = 0; |
| DeguNaoto | 0:b613dc16f27d | 182 | DEVICE_TX(sendDATA, 1); |
| DeguNaoto | 0:b613dc16f27d | 183 | } |
| DeguNaoto | 0:b613dc16f27d | 184 | memset(rcvBUFF_IM920, '\0', 40); |
| DeguNaoto | 0:b613dc16f27d | 185 | rcvFLAG = 0; |
| DeguNaoto | 0:b613dc16f27d | 186 | } |
| DeguNaoto | 0:b613dc16f27d | 187 | else if (rcvFLAG == 2) { |
| DeguNaoto | 0:b613dc16f27d | 188 | if (strlen(rcvBUFF_SBDBT) > 4) { |
| DeguNaoto | 0:b613dc16f27d | 189 | cvrecvDATAsbdbt(rcvBUFF_SBDBT, outDATA); |
| DeguNaoto | 0:b613dc16f27d | 190 | readDATA(outDATA); |
| DeguNaoto | 0:b613dc16f27d | 191 | deadCOUNT = 0; |
| DeguNaoto | 0:b613dc16f27d | 192 | deadflag = 0; |
| DeguNaoto | 0:b613dc16f27d | 193 | DEVICE_TX(sendDATA, 2); |
| DeguNaoto | 0:b613dc16f27d | 194 | } |
| DeguNaoto | 0:b613dc16f27d | 195 | memset(rcvBUFF_SBDBT, '\0', 40); |
| DeguNaoto | 0:b613dc16f27d | 196 | rcvFLAG = 0; |
| DeguNaoto | 0:b613dc16f27d | 197 | } |
| DeguNaoto | 0:b613dc16f27d | 198 | } |
| DeguNaoto | 0:b613dc16f27d | 199 | #else |
| DeguNaoto | 0:b613dc16f27d | 200 | /***Get state ps3con.***/ |
| DeguNaoto | 0:b613dc16f27d | 201 | #define SBDBT_TX p28 |
| DeguNaoto | 0:b613dc16f27d | 202 | #define SBDBT_RX p27 |
| DeguNaoto | 0:b613dc16f27d | 203 | Serial SBDBT(SBDBT_TX, SBDBT_RX); |
| DeguNaoto | 0:b613dc16f27d | 204 | #define ps3_start 0x80 |
| DeguNaoto | 0:b613dc16f27d | 205 | short toggle = 0; |
| DeguNaoto | 0:b613dc16f27d | 206 | short edge_circle = 0; |
| DeguNaoto | 0:b613dc16f27d | 207 | short edge_triangle = 0; |
| DeguNaoto | 0:b613dc16f27d | 208 | short edge_square = 0; |
| DeguNaoto | 0:b613dc16f27d | 209 | short edge_r1 = 0; |
| DeguNaoto | 0:b613dc16f27d | 210 | short edge_l1 = 0; |
| DeguNaoto | 0:b613dc16f27d | 211 | short edge_r2 = 0; |
| DeguNaoto | 0:b613dc16f27d | 212 | short edge_l2 = 0; |
| DeguNaoto | 0:b613dc16f27d | 213 | short edge_l_up = 0; |
| DeguNaoto | 0:b613dc16f27d | 214 | short edge_l_down = 0; |
| DeguNaoto | 0:b613dc16f27d | 215 | short edge_r_up = 0; |
| DeguNaoto | 0:b613dc16f27d | 216 | short edge_r_down = 0; |
| DeguNaoto | 0:b613dc16f27d | 217 | short edge_right = 0; |
| DeguNaoto | 0:b613dc16f27d | 218 | short edge_left = 0; |
| DeguNaoto | 0:b613dc16f27d | 219 | short edge_up = 0; |
| DeguNaoto | 0:b613dc16f27d | 220 | short edge_down = 0; |
| DeguNaoto | 0:b613dc16f27d | 221 | short edge_cross = 0; |
| DeguNaoto | 0:b613dc16f27d | 222 | short square = 0; |
| DeguNaoto | 0:b613dc16f27d | 223 | short triangle = 0; |
| DeguNaoto | 0:b613dc16f27d | 224 | short circle = 0; |
| DeguNaoto | 0:b613dc16f27d | 225 | short cross = 0; |
| DeguNaoto | 0:b613dc16f27d | 226 | short up = 0; |
| DeguNaoto | 0:b613dc16f27d | 227 | short down = 0; |
| DeguNaoto | 0:b613dc16f27d | 228 | short right = 0; |
| DeguNaoto | 0:b613dc16f27d | 229 | short left = 0; |
| DeguNaoto | 0:b613dc16f27d | 230 | short l1 = 0; |
| DeguNaoto | 0:b613dc16f27d | 231 | short l2 = 0; |
| DeguNaoto | 0:b613dc16f27d | 232 | short r1 = 0; |
| DeguNaoto | 0:b613dc16f27d | 233 | short r2 = 0; |
| DeguNaoto | 0:b613dc16f27d | 234 | signed int analog_lx = 0; |
| DeguNaoto | 0:b613dc16f27d | 235 | signed int analog_ly = 0; |
| DeguNaoto | 0:b613dc16f27d | 236 | signed int analog_rx = 0; |
| DeguNaoto | 0:b613dc16f27d | 237 | signed int analog_ry = 0; |
| DeguNaoto | 0:b613dc16f27d | 238 | int count = 0; |
| DeguNaoto | 0:b613dc16f27d | 239 | int sample = 0; |
| DeguNaoto | 0:b613dc16f27d | 240 | int ps3_data[7]; |
| DeguNaoto | 0:b613dc16f27d | 241 | inline void data_clear(); |
| DeguNaoto | 0:b613dc16f27d | 242 | inline void data_check(); |
| DeguNaoto | 0:b613dc16f27d | 243 | inline void SBDBT_interrupt(); |
| DeguNaoto | 0:b613dc16f27d | 244 | inline void initializeSBDBT(); |
| DeguNaoto | 0:b613dc16f27d | 245 | |
| DeguNaoto | 0:b613dc16f27d | 246 | inline void data_clear() |
| DeguNaoto | 0:b613dc16f27d | 247 | { |
| DeguNaoto | 0:b613dc16f27d | 248 | for(int i=0; i<7; i++) ps3_data[i]=0; |
| DeguNaoto | 0:b613dc16f27d | 249 | } |
| DeguNaoto | 0:b613dc16f27d | 250 | inline void data_check() |
| DeguNaoto | 0:b613dc16f27d | 251 | { |
| DeguNaoto | 0:b613dc16f27d | 252 | square=0,triangle=0,circle=0,cross=0,up=0,down=0,right=0,left=0,l1=0,l2=0,r1=0,r2=0; |
| DeguNaoto | 0:b613dc16f27d | 253 | analog_lx=0,analog_ly=0,analog_rx=0,analog_ry=0; |
| DeguNaoto | 0:b613dc16f27d | 254 | if((ps3_data[0]==0x00)&&(ps3_data[1]==0x01)) up=1; |
| DeguNaoto | 0:b613dc16f27d | 255 | else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x02)) down=1; |
| DeguNaoto | 0:b613dc16f27d | 256 | else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x04)) right=1; |
| DeguNaoto | 0:b613dc16f27d | 257 | else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x08)) left=1; |
| DeguNaoto | 0:b613dc16f27d | 258 | else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x10)) triangle=1; |
| DeguNaoto | 0:b613dc16f27d | 259 | else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x20)) cross=1; |
| DeguNaoto | 0:b613dc16f27d | 260 | else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x40)) circle=1; |
| DeguNaoto | 0:b613dc16f27d | 261 | else if((ps3_data[0]==0x01)&&(ps3_data[1]==0x00)) square=1; |
| DeguNaoto | 0:b613dc16f27d | 262 | else if((ps3_data[0]==0x02)&&(ps3_data[1]==0x00)) l1=1; |
| DeguNaoto | 0:b613dc16f27d | 263 | else if((ps3_data[0]==0x04)&&(ps3_data[1]==0x00)) l2=1; |
| DeguNaoto | 0:b613dc16f27d | 264 | else if((ps3_data[0]==0x08)&&(ps3_data[1]==0x00)) r1=1; |
| DeguNaoto | 0:b613dc16f27d | 265 | else if((ps3_data[0]==0x10)&&(ps3_data[1]==0x00)) r2=1; |
| DeguNaoto | 0:b613dc16f27d | 266 | analog_lx=64-(signed int)ps3_data[2]; |
| DeguNaoto | 0:b613dc16f27d | 267 | analog_ly=64-(signed int)ps3_data[3]; |
| DeguNaoto | 0:b613dc16f27d | 268 | analog_rx=64-(signed int)ps3_data[4]; |
| DeguNaoto | 0:b613dc16f27d | 269 | analog_ry=64-(signed int)ps3_data[5]; |
| DeguNaoto | 0:b613dc16f27d | 270 | if(!circle) edge_circle=1; |
| DeguNaoto | 0:b613dc16f27d | 271 | if(!triangle) edge_triangle=1; |
| DeguNaoto | 0:b613dc16f27d | 272 | if(!r1) edge_r1=1; |
| DeguNaoto | 0:b613dc16f27d | 273 | if(!l1) edge_l1=1; |
| DeguNaoto | 0:b613dc16f27d | 274 | if(!r2) edge_r2=1; |
| DeguNaoto | 0:b613dc16f27d | 275 | if(!l2) edge_l2=1; |
| DeguNaoto | 0:b613dc16f27d | 276 | if(!right) edge_right=1; |
| DeguNaoto | 0:b613dc16f27d | 277 | if(!left) edge_left=1; |
| DeguNaoto | 0:b613dc16f27d | 278 | if(!up) edge_up=1; |
| DeguNaoto | 0:b613dc16f27d | 279 | if(!square) edge_square=1; |
| DeguNaoto | 0:b613dc16f27d | 280 | if(!down) edge_down=1; |
| DeguNaoto | 0:b613dc16f27d | 281 | if(!cross) edge_cross=1; |
| DeguNaoto | 0:b613dc16f27d | 282 | } |
| DeguNaoto | 0:b613dc16f27d | 283 | ///interrupt SBDBT RX. |
| DeguNaoto | 0:b613dc16f27d | 284 | inline void SBDBT_interrupt() |
| DeguNaoto | 0:b613dc16f27d | 285 | { |
| DeguNaoto | 0:b613dc16f27d | 286 | sample=SBDBT.getc(); |
| DeguNaoto | 0:b613dc16f27d | 287 | if(count==7) data_clear(); |
| DeguNaoto | 0:b613dc16f27d | 288 | if(sample==ps3_start) count=0; |
| DeguNaoto | 0:b613dc16f27d | 289 | else { |
| DeguNaoto | 0:b613dc16f27d | 290 | ps3_data[count]=sample; |
| DeguNaoto | 0:b613dc16f27d | 291 | count++; |
| DeguNaoto | 0:b613dc16f27d | 292 | } |
| DeguNaoto | 0:b613dc16f27d | 293 | if(count==6) data_check(); |
| DeguNaoto | 0:b613dc16f27d | 294 | } |
| DeguNaoto | 0:b613dc16f27d | 295 | inline void initializeSBDBT() |
| DeguNaoto | 0:b613dc16f27d | 296 | { |
| DeguNaoto | 0:b613dc16f27d | 297 | wait(0.1); |
| DeguNaoto | 0:b613dc16f27d | 298 | while(analog_ly==-64) |
| DeguNaoto | 0:b613dc16f27d | 299 | for(int i=0; i<7; i++) ps3_data[i]=0; |
| DeguNaoto | 0:b613dc16f27d | 300 | SBDBT.baud(2400); |
| DeguNaoto | 0:b613dc16f27d | 301 | SBDBT.format(8, Serial::None, 1); |
| DeguNaoto | 0:b613dc16f27d | 302 | SBDBT.attach(SBDBT_interrupt, Serial::RxIrq); |
| DeguNaoto | 0:b613dc16f27d | 303 | } |
| DeguNaoto | 0:b613dc16f27d | 304 | #endif |