APP3 / Mbed 2 deprecated com_xbee

Dependencies:   mbed mbed-rtos

Committer:
EmileArseneault
Date:
Mon Feb 13 19:44:54 2017 +0000
Revision:
3:5010d20e681f
Parent:
1:318ad4f36a90
Child:
4:04351e4aad49
AtCommand avec parametres

Who changed what in which revision?

UserRevisionLine numberNew 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 CalculateChecksum()
ShaolinPoutine 0:25f9d14d01bd 12 {
ShaolinPoutine 0:25f9d14d01bd 13 // Does not include frame delimiter and lenght
ShaolinPoutine 0:25f9d14d01bd 14 return 1;
ShaolinPoutine 0:25f9d14d01bd 15 }
ShaolinPoutine 0:25f9d14d01bd 16
ShaolinPoutine 0:25f9d14d01bd 17 int CalculateLenght()
ShaolinPoutine 0:25f9d14d01bd 18 {
ShaolinPoutine 0:25f9d14d01bd 19 // Calculate the number of bytes in the frame data
ShaolinPoutine 0:25f9d14d01bd 20 return 1;
ShaolinPoutine 0:25f9d14d01bd 21 }
ShaolinPoutine 0:25f9d14d01bd 22
ShaolinPoutine 0:25f9d14d01bd 23 void printhexa(char c)
ShaolinPoutine 0:25f9d14d01bd 24 {
ShaolinPoutine 0:25f9d14d01bd 25 char msb = c >> 4;
ShaolinPoutine 0:25f9d14d01bd 26 char lsb = c & 0xF;
ShaolinPoutine 0:25f9d14d01bd 27
ShaolinPoutine 0:25f9d14d01bd 28 if (msb < 10)
ShaolinPoutine 0:25f9d14d01bd 29 msb += 0x30;
ShaolinPoutine 0:25f9d14d01bd 30 else
ShaolinPoutine 0:25f9d14d01bd 31 msb += 0x37;
ShaolinPoutine 0:25f9d14d01bd 32
ShaolinPoutine 0:25f9d14d01bd 33 if (lsb < 10)
ShaolinPoutine 0:25f9d14d01bd 34 lsb += 0x30;
ShaolinPoutine 0:25f9d14d01bd 35 else
ShaolinPoutine 0:25f9d14d01bd 36 lsb += 0x37;
ShaolinPoutine 0:25f9d14d01bd 37
ShaolinPoutine 0:25f9d14d01bd 38 pc.putc('0');
ShaolinPoutine 0:25f9d14d01bd 39 pc.putc('x');
ShaolinPoutine 0:25f9d14d01bd 40 pc.putc(msb);
ShaolinPoutine 0:25f9d14d01bd 41 pc.putc(lsb);
ShaolinPoutine 0:25f9d14d01bd 42 pc.putc(' ');
ShaolinPoutine 0:25f9d14d01bd 43 }
ShaolinPoutine 0:25f9d14d01bd 44
ShaolinPoutine 0:25f9d14d01bd 45 void GetATResponse()
ShaolinPoutine 0:25f9d14d01bd 46 {
ShaolinPoutine 0:25f9d14d01bd 47 char start = xbee.getc(); // = FRAMEDELIMITER
ShaolinPoutine 0:25f9d14d01bd 48 //assert
ShaolinPoutine 0:25f9d14d01bd 49 char len_msb = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 50 char len_lsb = xbee.getc();
ShaolinPoutine 1:318ad4f36a90 51
ShaolinPoutine 0:25f9d14d01bd 52 int len = ((int) len_msb << 4) + (int) len_lsb;
ShaolinPoutine 0:25f9d14d01bd 53 char frame_data[len];
ShaolinPoutine 0:25f9d14d01bd 54 int i = 0;
ShaolinPoutine 0:25f9d14d01bd 55 pc.printf("%d : ", len);
ShaolinPoutine 0:25f9d14d01bd 56 while (i < len)
ShaolinPoutine 0:25f9d14d01bd 57 {
ShaolinPoutine 0:25f9d14d01bd 58 if (xbee.readable())
ShaolinPoutine 1:318ad4f36a90 59 {
ShaolinPoutine 0:25f9d14d01bd 60 frame_data[i] = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 61 printhexa(frame_data[i]);
ShaolinPoutine 1:318ad4f36a90 62 i++;
ShaolinPoutine 0:25f9d14d01bd 63 }
ShaolinPoutine 0:25f9d14d01bd 64 }
ShaolinPoutine 0:25f9d14d01bd 65
ShaolinPoutine 0:25f9d14d01bd 66 char checksum = xbee.getc();
ShaolinPoutine 0:25f9d14d01bd 67 // Verify checksum
ShaolinPoutine 1:318ad4f36a90 68 pc.printf(" checksum = ");
ShaolinPoutine 1:318ad4f36a90 69 printhexa(checksum);
ShaolinPoutine 0:25f9d14d01bd 70 pc.printf("\r\n");
ShaolinPoutine 0:25f9d14d01bd 71 }
ShaolinPoutine 0:25f9d14d01bd 72
ShaolinPoutine 0:25f9d14d01bd 73 void ReadSerial()
ShaolinPoutine 0:25f9d14d01bd 74 {
ShaolinPoutine 0:25f9d14d01bd 75 // 00 13 A2 00
ShaolinPoutine 0:25f9d14d01bd 76 // 40 3E 09 63
ShaolinPoutine 0:25f9d14d01bd 77 char cmdtosend[8];
ShaolinPoutine 0:25f9d14d01bd 78 int i = 0;
ShaolinPoutine 0:25f9d14d01bd 79
ShaolinPoutine 0:25f9d14d01bd 80 cmdtosend[0] = FRAMEDELIMITER;
ShaolinPoutine 0:25f9d14d01bd 81 cmdtosend[1] = 0x00;
ShaolinPoutine 0:25f9d14d01bd 82 cmdtosend[2] = 0x04;
ShaolinPoutine 0:25f9d14d01bd 83 cmdtosend[3] = 0x08;
ShaolinPoutine 0:25f9d14d01bd 84 cmdtosend[4] = 0x52;
ShaolinPoutine 0:25f9d14d01bd 85 cmdtosend[5] = 'S'; // 0x53
ShaolinPoutine 1:318ad4f36a90 86 cmdtosend[6] = 'L'; // 0x48
ShaolinPoutine 0:25f9d14d01bd 87 cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
ShaolinPoutine 0:25f9d14d01bd 88
ShaolinPoutine 0:25f9d14d01bd 89 while (i < 8)
ShaolinPoutine 0:25f9d14d01bd 90 {
ShaolinPoutine 0:25f9d14d01bd 91 xbee.putc(cmdtosend[i]);
ShaolinPoutine 0:25f9d14d01bd 92 i++;
ShaolinPoutine 0:25f9d14d01bd 93 }
ShaolinPoutine 0:25f9d14d01bd 94
ShaolinPoutine 1:318ad4f36a90 95 wait(0.5);
ShaolinPoutine 1:318ad4f36a90 96 i = 0;
ShaolinPoutine 0:25f9d14d01bd 97 cmdtosend[0] = FRAMEDELIMITER;
ShaolinPoutine 0:25f9d14d01bd 98 cmdtosend[1] = 0x00;
ShaolinPoutine 0:25f9d14d01bd 99 cmdtosend[2] = 0x04;
ShaolinPoutine 0:25f9d14d01bd 100 cmdtosend[3] = 0x08;
ShaolinPoutine 0:25f9d14d01bd 101 cmdtosend[4] = 0x52;
ShaolinPoutine 0:25f9d14d01bd 102 cmdtosend[5] = 'S'; // 0x53
ShaolinPoutine 1:318ad4f36a90 103 cmdtosend[6] = 'H'; // 0x48
ShaolinPoutine 0:25f9d14d01bd 104 cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
ShaolinPoutine 0:25f9d14d01bd 105
ShaolinPoutine 0:25f9d14d01bd 106 while (i < 8)
ShaolinPoutine 0:25f9d14d01bd 107 {
ShaolinPoutine 0:25f9d14d01bd 108 xbee.putc(cmdtosend[i]);
ShaolinPoutine 0:25f9d14d01bd 109 i++;
ShaolinPoutine 0:25f9d14d01bd 110 }
ShaolinPoutine 0:25f9d14d01bd 111 }
ShaolinPoutine 0:25f9d14d01bd 112
EmileArseneault 3:5010d20e681f 113 void AtCommand(char FirstChar, char SecondChar, char *OptionalParam = NULL, int ParamLen = 0)
EmileArseneault 3:5010d20e681f 114 {
EmileArseneault 3:5010d20e681f 115 // Frame Type 0x08
EmileArseneault 3:5010d20e681f 116 // Two char as parameters
EmileArseneault 3:5010d20e681f 117
EmileArseneault 3:5010d20e681f 118 char cmdtosend[10];
EmileArseneault 3:5010d20e681f 119 char sum = 0;
EmileArseneault 3:5010d20e681f 120 int cmdlength = 8;
EmileArseneault 3:5010d20e681f 121 int i = 0;
EmileArseneault 3:5010d20e681f 122
EmileArseneault 3:5010d20e681f 123 cmdtosend[0] = FRAMEDELIMITER;
EmileArseneault 3:5010d20e681f 124 cmdtosend[1] = 0x00;
EmileArseneault 3:5010d20e681f 125 cmdtosend[2] = 0x04 + ParamLen;
EmileArseneault 3:5010d20e681f 126 cmdtosend[3] = 0x08;
EmileArseneault 3:5010d20e681f 127 cmdtosend[4] = 0x52;
EmileArseneault 3:5010d20e681f 128 cmdtosend[5] = FirstChar;
EmileArseneault 3:5010d20e681f 129 cmdtosend[6] = SecondChar;
EmileArseneault 3:5010d20e681f 130
EmileArseneault 3:5010d20e681f 131 // Ajouter les parametres au message
EmileArseneault 3:5010d20e681f 132 if(OptionalParam != NULL)
EmileArseneault 3:5010d20e681f 133 {
EmileArseneault 3:5010d20e681f 134 i = 0;
EmileArseneault 3:5010d20e681f 135 cmdlength += ParamLen;
EmileArseneault 3:5010d20e681f 136
EmileArseneault 3:5010d20e681f 137 while (i < ParamLen)
EmileArseneault 3:5010d20e681f 138 {
EmileArseneault 3:5010d20e681f 139 pc.putc((OptionalParam)[i]);
EmileArseneault 3:5010d20e681f 140 cmdtosend[7 + i] = (OptionalParam)[i];
EmileArseneault 3:5010d20e681f 141 i++;
EmileArseneault 3:5010d20e681f 142 }
EmileArseneault 3:5010d20e681f 143 pc.printf("\r\n");
EmileArseneault 3:5010d20e681f 144 }
EmileArseneault 3:5010d20e681f 145
EmileArseneault 3:5010d20e681f 146 // Calculate checksum
EmileArseneault 3:5010d20e681f 147 i = 3;
EmileArseneault 3:5010d20e681f 148 while (i < (cmdlength - 1))
EmileArseneault 3:5010d20e681f 149 {
EmileArseneault 3:5010d20e681f 150 sum += cmdtosend[i];
EmileArseneault 3:5010d20e681f 151 i++;
EmileArseneault 3:5010d20e681f 152 }
EmileArseneault 3:5010d20e681f 153 cmdtosend[cmdlength - 1] = 0xFF - sum;
EmileArseneault 3:5010d20e681f 154
EmileArseneault 3:5010d20e681f 155 // Envoyer la commande sur UART
EmileArseneault 3:5010d20e681f 156 i = 0;
EmileArseneault 3:5010d20e681f 157 while (i < cmdlength)
EmileArseneault 3:5010d20e681f 158 {
EmileArseneault 3:5010d20e681f 159 xbee.putc(cmdtosend[i]);
EmileArseneault 3:5010d20e681f 160 i++;
EmileArseneault 3:5010d20e681f 161 }
EmileArseneault 3:5010d20e681f 162 }
EmileArseneault 3:5010d20e681f 163
ShaolinPoutine 0:25f9d14d01bd 164
ShaolinPoutine 1:318ad4f36a90 165 void xbee_reader()
ShaolinPoutine 1:318ad4f36a90 166 {
ShaolinPoutine 1:318ad4f36a90 167 while(1)
ShaolinPoutine 1:318ad4f36a90 168 {
ShaolinPoutine 1:318ad4f36a90 169 if (xbee.readable())
ShaolinPoutine 1:318ad4f36a90 170 {
ShaolinPoutine 1:318ad4f36a90 171 GetATResponse();
ShaolinPoutine 1:318ad4f36a90 172 }
ShaolinPoutine 1:318ad4f36a90 173 wait(0.001);
ShaolinPoutine 1:318ad4f36a90 174 }
ShaolinPoutine 1:318ad4f36a90 175 }
ShaolinPoutine 1:318ad4f36a90 176
ShaolinPoutine 1:318ad4f36a90 177 void tick()
ShaolinPoutine 1:318ad4f36a90 178 {
ShaolinPoutine 1:318ad4f36a90 179 myled = !myled;
ShaolinPoutine 1:318ad4f36a90 180 }
ShaolinPoutine 1:318ad4f36a90 181
ShaolinPoutine 0:25f9d14d01bd 182 int main() {
ShaolinPoutine 1:318ad4f36a90 183 Thread thread(xbee_reader);
ShaolinPoutine 1:318ad4f36a90 184 Ticker ticker;
ShaolinPoutine 1:318ad4f36a90 185 ticker.attach(&tick, 1);
ShaolinPoutine 0:25f9d14d01bd 186 pc.printf("\r\n");
ShaolinPoutine 0:25f9d14d01bd 187 resetswitch = 0;
ShaolinPoutine 0:25f9d14d01bd 188 wait(0.4);
ShaolinPoutine 0:25f9d14d01bd 189 resetswitch = 1;
ShaolinPoutine 0:25f9d14d01bd 190
ShaolinPoutine 1:318ad4f36a90 191 wait(3);
ShaolinPoutine 1:318ad4f36a90 192
EmileArseneault 3:5010d20e681f 193 char Params[2] = {'a', 'b'};
EmileArseneault 3:5010d20e681f 194
ShaolinPoutine 0:25f9d14d01bd 195 ReadSerial();
EmileArseneault 3:5010d20e681f 196 wait(0.5);
EmileArseneault 3:5010d20e681f 197 AtCommand('O', 'I');
EmileArseneault 3:5010d20e681f 198 wait(0.5);
EmileArseneault 3:5010d20e681f 199 AtCommand('I', 'I', &Params[0], 2);
EmileArseneault 3:5010d20e681f 200 wait(0.5);
EmileArseneault 3:5010d20e681f 201 AtCommand('O', 'I');
EmileArseneault 3:5010d20e681f 202 wait(0.5);
EmileArseneault 3:5010d20e681f 203
ShaolinPoutine 0:25f9d14d01bd 204
ShaolinPoutine 0:25f9d14d01bd 205 while(1) {
ShaolinPoutine 0:25f9d14d01bd 206 }
ShaolinPoutine 0:25f9d14d01bd 207 }