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.
main.cpp@1:318ad4f36a90, 2017-02-13 (annotated)
- Committer:
- ShaolinPoutine
- Date:
- Mon Feb 13 17:42:31 2017 +0000
- Revision:
- 1:318ad4f36a90
- Parent:
- 0:25f9d14d01bd
- Child:
- 2:c6d623a30254
- Child:
- 3:5010d20e681f
Added asynchronous read.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ShaolinPoutine | 0:25f9d14d01bd | 1 | #include "mbed.h" |
| ShaolinPoutine | 0:25f9d14d01bd | 2 | #define FRAMEDELIMITER 0x7E |
| ShaolinPoutine | 1:318ad4f36a90 | 3 | #include "rtos.h" |
| ShaolinPoutine | 0:25f9d14d01bd | 4 | |
| ShaolinPoutine | 1:318ad4f36a90 | 5 | // 4269 |
| ShaolinPoutine | 0:25f9d14d01bd | 6 | DigitalOut resetswitch(p8); |
| ShaolinPoutine | 0:25f9d14d01bd | 7 | Serial xbee(p13, p14); |
| ShaolinPoutine | 0:25f9d14d01bd | 8 | Serial pc(USBTX, USBRX); |
| ShaolinPoutine | 0:25f9d14d01bd | 9 | DigitalOut myled(LED1); |
| ShaolinPoutine | 0:25f9d14d01bd | 10 | |
| ShaolinPoutine | 0:25f9d14d01bd | 11 | int StartAPIMode () |
| ShaolinPoutine | 0:25f9d14d01bd | 12 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 13 | char reponse[4] = {42,42,42,'\0'}; |
| ShaolinPoutine | 0:25f9d14d01bd | 14 | |
| ShaolinPoutine | 0:25f9d14d01bd | 15 | wait(1); |
| ShaolinPoutine | 0:25f9d14d01bd | 16 | xbee.putc('+'); |
| ShaolinPoutine | 0:25f9d14d01bd | 17 | xbee.putc('+'); |
| ShaolinPoutine | 0:25f9d14d01bd | 18 | xbee.putc('+'); |
| ShaolinPoutine | 0:25f9d14d01bd | 19 | wait(0.5); |
| ShaolinPoutine | 0:25f9d14d01bd | 20 | |
| ShaolinPoutine | 0:25f9d14d01bd | 21 | int i = 0; |
| ShaolinPoutine | 0:25f9d14d01bd | 22 | |
| ShaolinPoutine | 0:25f9d14d01bd | 23 | while (i < 4) |
| ShaolinPoutine | 0:25f9d14d01bd | 24 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 25 | reponse[i] = xbee.getc(); |
| ShaolinPoutine | 0:25f9d14d01bd | 26 | pc.putc(reponse[i]); |
| ShaolinPoutine | 0:25f9d14d01bd | 27 | i++; |
| ShaolinPoutine | 0:25f9d14d01bd | 28 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 29 | |
| ShaolinPoutine | 0:25f9d14d01bd | 30 | return reponse[1]; |
| ShaolinPoutine | 0:25f9d14d01bd | 31 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 32 | |
| ShaolinPoutine | 0:25f9d14d01bd | 33 | int CalculateChecksum() |
| ShaolinPoutine | 0:25f9d14d01bd | 34 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 35 | // Does not include frame delimiter and lenght |
| ShaolinPoutine | 0:25f9d14d01bd | 36 | return 1; |
| ShaolinPoutine | 0:25f9d14d01bd | 37 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 38 | |
| ShaolinPoutine | 0:25f9d14d01bd | 39 | int CalculateLenght() |
| ShaolinPoutine | 0:25f9d14d01bd | 40 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 41 | // Calculate the number of bytes in the frame data |
| ShaolinPoutine | 0:25f9d14d01bd | 42 | return 1; |
| ShaolinPoutine | 0:25f9d14d01bd | 43 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 44 | |
| ShaolinPoutine | 0:25f9d14d01bd | 45 | void printhexa(char c) |
| ShaolinPoutine | 0:25f9d14d01bd | 46 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 47 | char msb = c >> 4; |
| ShaolinPoutine | 0:25f9d14d01bd | 48 | char lsb = c & 0xF; |
| ShaolinPoutine | 0:25f9d14d01bd | 49 | |
| ShaolinPoutine | 0:25f9d14d01bd | 50 | if (msb < 10) |
| ShaolinPoutine | 0:25f9d14d01bd | 51 | msb += 0x30; |
| ShaolinPoutine | 0:25f9d14d01bd | 52 | else |
| ShaolinPoutine | 0:25f9d14d01bd | 53 | msb += 0x37; |
| ShaolinPoutine | 0:25f9d14d01bd | 54 | |
| ShaolinPoutine | 0:25f9d14d01bd | 55 | if (lsb < 10) |
| ShaolinPoutine | 0:25f9d14d01bd | 56 | lsb += 0x30; |
| ShaolinPoutine | 0:25f9d14d01bd | 57 | else |
| ShaolinPoutine | 0:25f9d14d01bd | 58 | lsb += 0x37; |
| ShaolinPoutine | 0:25f9d14d01bd | 59 | |
| ShaolinPoutine | 0:25f9d14d01bd | 60 | pc.putc('0'); |
| ShaolinPoutine | 0:25f9d14d01bd | 61 | pc.putc('x'); |
| ShaolinPoutine | 0:25f9d14d01bd | 62 | pc.putc(msb); |
| ShaolinPoutine | 0:25f9d14d01bd | 63 | pc.putc(lsb); |
| ShaolinPoutine | 0:25f9d14d01bd | 64 | pc.putc(' '); |
| ShaolinPoutine | 0:25f9d14d01bd | 65 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 66 | |
| ShaolinPoutine | 0:25f9d14d01bd | 67 | void GetATResponse() |
| ShaolinPoutine | 0:25f9d14d01bd | 68 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 69 | char start = xbee.getc(); // = FRAMEDELIMITER |
| ShaolinPoutine | 0:25f9d14d01bd | 70 | //assert |
| ShaolinPoutine | 0:25f9d14d01bd | 71 | char len_msb = xbee.getc(); |
| ShaolinPoutine | 0:25f9d14d01bd | 72 | char len_lsb = xbee.getc(); |
| ShaolinPoutine | 1:318ad4f36a90 | 73 | |
| ShaolinPoutine | 0:25f9d14d01bd | 74 | int len = ((int) len_msb << 4) + (int) len_lsb; |
| ShaolinPoutine | 0:25f9d14d01bd | 75 | char frame_data[len]; |
| ShaolinPoutine | 0:25f9d14d01bd | 76 | int i = 0; |
| ShaolinPoutine | 0:25f9d14d01bd | 77 | pc.printf("%d : ", len); |
| ShaolinPoutine | 0:25f9d14d01bd | 78 | while (i < len) |
| ShaolinPoutine | 0:25f9d14d01bd | 79 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 80 | if (xbee.readable()) |
| ShaolinPoutine | 1:318ad4f36a90 | 81 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 82 | frame_data[i] = xbee.getc(); |
| ShaolinPoutine | 0:25f9d14d01bd | 83 | printhexa(frame_data[i]); |
| ShaolinPoutine | 1:318ad4f36a90 | 84 | i++; |
| ShaolinPoutine | 0:25f9d14d01bd | 85 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 86 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 87 | |
| ShaolinPoutine | 0:25f9d14d01bd | 88 | char checksum = xbee.getc(); |
| ShaolinPoutine | 0:25f9d14d01bd | 89 | // Verify checksum |
| ShaolinPoutine | 1:318ad4f36a90 | 90 | pc.printf(" checksum = "); |
| ShaolinPoutine | 1:318ad4f36a90 | 91 | printhexa(checksum); |
| ShaolinPoutine | 0:25f9d14d01bd | 92 | pc.printf("\r\n"); |
| ShaolinPoutine | 0:25f9d14d01bd | 93 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 94 | |
| ShaolinPoutine | 0:25f9d14d01bd | 95 | void ReadSerial() |
| ShaolinPoutine | 0:25f9d14d01bd | 96 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 97 | // 00 13 A2 00 |
| ShaolinPoutine | 0:25f9d14d01bd | 98 | // 40 3E 09 63 |
| ShaolinPoutine | 0:25f9d14d01bd | 99 | char cmdtosend[8]; |
| ShaolinPoutine | 0:25f9d14d01bd | 100 | int i = 0; |
| ShaolinPoutine | 0:25f9d14d01bd | 101 | |
| ShaolinPoutine | 0:25f9d14d01bd | 102 | cmdtosend[0] = FRAMEDELIMITER; |
| ShaolinPoutine | 0:25f9d14d01bd | 103 | cmdtosend[1] = 0x00; |
| ShaolinPoutine | 0:25f9d14d01bd | 104 | cmdtosend[2] = 0x04; |
| ShaolinPoutine | 0:25f9d14d01bd | 105 | cmdtosend[3] = 0x08; |
| ShaolinPoutine | 0:25f9d14d01bd | 106 | cmdtosend[4] = 0x52; |
| ShaolinPoutine | 0:25f9d14d01bd | 107 | cmdtosend[5] = 'S'; // 0x53 |
| ShaolinPoutine | 1:318ad4f36a90 | 108 | cmdtosend[6] = 'L'; // 0x48 |
| ShaolinPoutine | 0:25f9d14d01bd | 109 | cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]); |
| ShaolinPoutine | 0:25f9d14d01bd | 110 | |
| ShaolinPoutine | 0:25f9d14d01bd | 111 | while (i < 8) |
| ShaolinPoutine | 0:25f9d14d01bd | 112 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 113 | xbee.putc(cmdtosend[i]); |
| ShaolinPoutine | 0:25f9d14d01bd | 114 | i++; |
| ShaolinPoutine | 0:25f9d14d01bd | 115 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 116 | |
| ShaolinPoutine | 1:318ad4f36a90 | 117 | wait(0.5); |
| ShaolinPoutine | 1:318ad4f36a90 | 118 | i = 0; |
| ShaolinPoutine | 0:25f9d14d01bd | 119 | cmdtosend[0] = FRAMEDELIMITER; |
| ShaolinPoutine | 0:25f9d14d01bd | 120 | cmdtosend[1] = 0x00; |
| ShaolinPoutine | 0:25f9d14d01bd | 121 | cmdtosend[2] = 0x04; |
| ShaolinPoutine | 0:25f9d14d01bd | 122 | cmdtosend[3] = 0x08; |
| ShaolinPoutine | 0:25f9d14d01bd | 123 | cmdtosend[4] = 0x52; |
| ShaolinPoutine | 0:25f9d14d01bd | 124 | cmdtosend[5] = 'S'; // 0x53 |
| ShaolinPoutine | 1:318ad4f36a90 | 125 | cmdtosend[6] = 'H'; // 0x48 |
| ShaolinPoutine | 0:25f9d14d01bd | 126 | cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]); |
| ShaolinPoutine | 0:25f9d14d01bd | 127 | |
| ShaolinPoutine | 0:25f9d14d01bd | 128 | while (i < 8) |
| ShaolinPoutine | 0:25f9d14d01bd | 129 | { |
| ShaolinPoutine | 0:25f9d14d01bd | 130 | xbee.putc(cmdtosend[i]); |
| ShaolinPoutine | 0:25f9d14d01bd | 131 | i++; |
| ShaolinPoutine | 0:25f9d14d01bd | 132 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 133 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 134 | |
| ShaolinPoutine | 0:25f9d14d01bd | 135 | |
| ShaolinPoutine | 1:318ad4f36a90 | 136 | void xbee_reader() |
| ShaolinPoutine | 1:318ad4f36a90 | 137 | { |
| ShaolinPoutine | 1:318ad4f36a90 | 138 | while(1) |
| ShaolinPoutine | 1:318ad4f36a90 | 139 | { |
| ShaolinPoutine | 1:318ad4f36a90 | 140 | if (xbee.readable()) |
| ShaolinPoutine | 1:318ad4f36a90 | 141 | { |
| ShaolinPoutine | 1:318ad4f36a90 | 142 | GetATResponse(); |
| ShaolinPoutine | 1:318ad4f36a90 | 143 | } |
| ShaolinPoutine | 1:318ad4f36a90 | 144 | wait(0.001); |
| ShaolinPoutine | 1:318ad4f36a90 | 145 | } |
| ShaolinPoutine | 1:318ad4f36a90 | 146 | } |
| ShaolinPoutine | 1:318ad4f36a90 | 147 | |
| ShaolinPoutine | 1:318ad4f36a90 | 148 | void tick() |
| ShaolinPoutine | 1:318ad4f36a90 | 149 | { |
| ShaolinPoutine | 1:318ad4f36a90 | 150 | myled = !myled; |
| ShaolinPoutine | 1:318ad4f36a90 | 151 | } |
| ShaolinPoutine | 1:318ad4f36a90 | 152 | |
| ShaolinPoutine | 0:25f9d14d01bd | 153 | int main() { |
| ShaolinPoutine | 1:318ad4f36a90 | 154 | Thread thread(xbee_reader); |
| ShaolinPoutine | 1:318ad4f36a90 | 155 | Ticker ticker; |
| ShaolinPoutine | 1:318ad4f36a90 | 156 | ticker.attach(&tick, 1); |
| ShaolinPoutine | 0:25f9d14d01bd | 157 | pc.printf("\r\n"); |
| ShaolinPoutine | 0:25f9d14d01bd | 158 | resetswitch = 0; |
| ShaolinPoutine | 0:25f9d14d01bd | 159 | wait(0.4); |
| ShaolinPoutine | 0:25f9d14d01bd | 160 | resetswitch = 1; |
| ShaolinPoutine | 0:25f9d14d01bd | 161 | |
| ShaolinPoutine | 1:318ad4f36a90 | 162 | wait(3); |
| ShaolinPoutine | 1:318ad4f36a90 | 163 | |
| ShaolinPoutine | 0:25f9d14d01bd | 164 | ReadSerial(); |
| ShaolinPoutine | 0:25f9d14d01bd | 165 | |
| ShaolinPoutine | 0:25f9d14d01bd | 166 | while(1) { |
| ShaolinPoutine | 0:25f9d14d01bd | 167 | } |
| ShaolinPoutine | 0:25f9d14d01bd | 168 | } |