mini code pour xbee
Dependencies: mbed ConfigFile EthernetInterface WebSocketClient mbed-rtos
Fork of app4Coordo by
main.cpp@2:5942af2ffe8b, 2014-02-22 (annotated)
- Committer:
- passelin
- Date:
- Sat Feb 22 23:45:52 2014 +0000
- Revision:
- 2:5942af2ffe8b
- Parent:
- 1:568707763458
- Child:
- 3:85025db3fbd1
xbee fonctionnel
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
passelin | 0:ed0e18b7fa30 | 1 | #include "mbed.h" |
passelin | 2:5942af2ffe8b | 2 | #include <string> |
passelin | 0:ed0e18b7fa30 | 3 | |
passelin | 0:ed0e18b7fa30 | 4 | DigitalOut myled(LED1); |
passelin | 1:568707763458 | 5 | DigitalOut myled2(LED2); |
passelin | 0:ed0e18b7fa30 | 6 | DigitalOut reset(p8); |
passelin | 0:ed0e18b7fa30 | 7 | Serial pc(USBTX, USBRX); |
passelin | 0:ed0e18b7fa30 | 8 | Serial xbee(p13, p14); |
passelin | 0:ed0e18b7fa30 | 9 | |
passelin | 2:5942af2ffe8b | 10 | string test; |
passelin | 2:5942af2ffe8b | 11 | bool trame_ready; |
passelin | 2:5942af2ffe8b | 12 | |
passelin | 2:5942af2ffe8b | 13 | enum {STEP_START, STEP_LENGTH, STEP_TYPE, STEP_MAC, STEP_NET, STEP_OPT, STEP_DATA, STEP_CHECK}; |
passelin | 2:5942af2ffe8b | 14 | |
passelin | 2:5942af2ffe8b | 15 | void xbee_init() |
passelin | 0:ed0e18b7fa30 | 16 | { |
passelin | 0:ed0e18b7fa30 | 17 | reset = 0; |
passelin | 1:568707763458 | 18 | wait_ms(400); |
passelin | 1:568707763458 | 19 | reset = 1; |
passelin | 2:5942af2ffe8b | 20 | } |
passelin | 2:5942af2ffe8b | 21 | |
passelin | 2:5942af2ffe8b | 22 | void xbee_receive() |
passelin | 2:5942af2ffe8b | 23 | { |
passelin | 2:5942af2ffe8b | 24 | // TODO: analyze trame before sending to PC (or WebSocket) |
passelin | 2:5942af2ffe8b | 25 | static int state = STEP_START; |
passelin | 2:5942af2ffe8b | 26 | |
passelin | 2:5942af2ffe8b | 27 | char data = xbee.getc(); |
passelin | 2:5942af2ffe8b | 28 | |
passelin | 2:5942af2ffe8b | 29 | static int length_i; |
passelin | 2:5942af2ffe8b | 30 | static int length; |
passelin | 2:5942af2ffe8b | 31 | |
passelin | 2:5942af2ffe8b | 32 | static int mac_i; |
passelin | 2:5942af2ffe8b | 33 | |
passelin | 2:5942af2ffe8b | 34 | static int net_i; |
passelin | 2:5942af2ffe8b | 35 | |
passelin | 2:5942af2ffe8b | 36 | static string msg; |
passelin | 2:5942af2ffe8b | 37 | |
passelin | 2:5942af2ffe8b | 38 | switch(state) |
passelin | 2:5942af2ffe8b | 39 | { |
passelin | 2:5942af2ffe8b | 40 | case STEP_START: if(data == 0x7E) |
passelin | 2:5942af2ffe8b | 41 | { |
passelin | 2:5942af2ffe8b | 42 | state = STEP_LENGTH; |
passelin | 2:5942af2ffe8b | 43 | length_i = 0; |
passelin | 2:5942af2ffe8b | 44 | length = 0; |
passelin | 2:5942af2ffe8b | 45 | msg = "xx"; |
passelin | 2:5942af2ffe8b | 46 | } |
passelin | 2:5942af2ffe8b | 47 | break; |
passelin | 2:5942af2ffe8b | 48 | |
passelin | 2:5942af2ffe8b | 49 | case STEP_LENGTH: length += data; |
passelin | 2:5942af2ffe8b | 50 | length_i++; |
passelin | 2:5942af2ffe8b | 51 | if(length_i == 2) |
passelin | 2:5942af2ffe8b | 52 | { |
passelin | 2:5942af2ffe8b | 53 | state = STEP_TYPE; |
passelin | 2:5942af2ffe8b | 54 | length -= 12; |
passelin | 2:5942af2ffe8b | 55 | } |
passelin | 2:5942af2ffe8b | 56 | break; |
passelin | 2:5942af2ffe8b | 57 | |
passelin | 2:5942af2ffe8b | 58 | case STEP_TYPE: if(data == 0x90) //Receive packet |
passelin | 2:5942af2ffe8b | 59 | { |
passelin | 2:5942af2ffe8b | 60 | state = STEP_MAC; |
passelin | 2:5942af2ffe8b | 61 | mac_i = 0; |
passelin | 2:5942af2ffe8b | 62 | } |
passelin | 2:5942af2ffe8b | 63 | else |
passelin | 2:5942af2ffe8b | 64 | { |
passelin | 2:5942af2ffe8b | 65 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 66 | } |
passelin | 2:5942af2ffe8b | 67 | break; |
passelin | 2:5942af2ffe8b | 68 | |
passelin | 2:5942af2ffe8b | 69 | case STEP_MAC: mac_i++; |
passelin | 2:5942af2ffe8b | 70 | if(mac_i == 8) |
passelin | 2:5942af2ffe8b | 71 | { |
passelin | 2:5942af2ffe8b | 72 | state = STEP_NET; |
passelin | 2:5942af2ffe8b | 73 | net_i = 0; |
passelin | 2:5942af2ffe8b | 74 | } |
passelin | 2:5942af2ffe8b | 75 | break; |
passelin | 2:5942af2ffe8b | 76 | |
passelin | 2:5942af2ffe8b | 77 | case STEP_NET: net_i++; |
passelin | 2:5942af2ffe8b | 78 | if(net_i == 2) |
passelin | 2:5942af2ffe8b | 79 | { |
passelin | 2:5942af2ffe8b | 80 | state = STEP_OPT; |
passelin | 2:5942af2ffe8b | 81 | } |
passelin | 2:5942af2ffe8b | 82 | break; |
passelin | 2:5942af2ffe8b | 83 | |
passelin | 2:5942af2ffe8b | 84 | case STEP_OPT: if(data == 0x01) |
passelin | 2:5942af2ffe8b | 85 | { |
passelin | 2:5942af2ffe8b | 86 | state = STEP_DATA; |
passelin | 2:5942af2ffe8b | 87 | } |
passelin | 2:5942af2ffe8b | 88 | else |
passelin | 2:5942af2ffe8b | 89 | { |
passelin | 2:5942af2ffe8b | 90 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 91 | } |
passelin | 2:5942af2ffe8b | 92 | break; |
passelin | 2:5942af2ffe8b | 93 | |
passelin | 2:5942af2ffe8b | 94 | case STEP_DATA: length--; |
passelin | 2:5942af2ffe8b | 95 | msg += data; |
passelin | 2:5942af2ffe8b | 96 | if(length == 0) |
passelin | 2:5942af2ffe8b | 97 | { |
passelin | 2:5942af2ffe8b | 98 | state = STEP_CHECK; |
passelin | 2:5942af2ffe8b | 99 | //pc.printf(msg.c_str()); |
passelin | 2:5942af2ffe8b | 100 | test = msg.substr(2); |
passelin | 2:5942af2ffe8b | 101 | trame_ready = true; |
passelin | 2:5942af2ffe8b | 102 | } |
passelin | 2:5942af2ffe8b | 103 | break; |
passelin | 2:5942af2ffe8b | 104 | |
passelin | 2:5942af2ffe8b | 105 | case STEP_CHECK: //check CS |
passelin | 2:5942af2ffe8b | 106 | state = STEP_START; |
passelin | 2:5942af2ffe8b | 107 | break; |
passelin | 2:5942af2ffe8b | 108 | |
passelin | 2:5942af2ffe8b | 109 | |
passelin | 2:5942af2ffe8b | 110 | } |
passelin | 2:5942af2ffe8b | 111 | |
passelin | 2:5942af2ffe8b | 112 | } |
passelin | 2:5942af2ffe8b | 113 | |
passelin | 2:5942af2ffe8b | 114 | int main() |
passelin | 2:5942af2ffe8b | 115 | { |
passelin | 2:5942af2ffe8b | 116 | xbee_init(); |
passelin | 2:5942af2ffe8b | 117 | |
passelin | 2:5942af2ffe8b | 118 | |
passelin | 2:5942af2ffe8b | 119 | myled = 1; |
passelin | 2:5942af2ffe8b | 120 | myled2 = 1; |
passelin | 2:5942af2ffe8b | 121 | |
passelin | 2:5942af2ffe8b | 122 | trame_ready = false; |
passelin | 2:5942af2ffe8b | 123 | |
passelin | 0:ed0e18b7fa30 | 124 | while(1) |
passelin | 0:ed0e18b7fa30 | 125 | { |
passelin | 0:ed0e18b7fa30 | 126 | if(xbee.readable()) |
passelin | 0:ed0e18b7fa30 | 127 | { |
passelin | 2:5942af2ffe8b | 128 | xbee_receive(); |
passelin | 2:5942af2ffe8b | 129 | |
passelin | 2:5942af2ffe8b | 130 | //pc.printf("%x ", xbee.getc()); |
passelin | 2:5942af2ffe8b | 131 | //pc.putc(xbee.getc()); |
passelin | 1:568707763458 | 132 | myled2 = ! myled2; |
passelin | 0:ed0e18b7fa30 | 133 | } |
passelin | 2:5942af2ffe8b | 134 | |
passelin | 0:ed0e18b7fa30 | 135 | if(pc.readable()) |
passelin | 0:ed0e18b7fa30 | 136 | { |
passelin | 1:568707763458 | 137 | xbee.putc(pc.getc()); |
passelin | 1:568707763458 | 138 | myled = ! myled; |
passelin | 0:ed0e18b7fa30 | 139 | } |
passelin | 2:5942af2ffe8b | 140 | |
passelin | 2:5942af2ffe8b | 141 | if(trame_ready == true) |
passelin | 2:5942af2ffe8b | 142 | { |
passelin | 2:5942af2ffe8b | 143 | pc.printf(test.c_str()); |
passelin | 2:5942af2ffe8b | 144 | trame_ready = false; |
passelin | 2:5942af2ffe8b | 145 | } |
passelin | 0:ed0e18b7fa30 | 146 | } |
passelin | 0:ed0e18b7fa30 | 147 | } |