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
- Committer:
- ShaolinPoutine
- Date:
- 2017-02-13
- Revision:
- 1:318ad4f36a90
- Parent:
- 0:25f9d14d01bd
- Child:
- 2:c6d623a30254
- Child:
- 3:5010d20e681f
File content as of revision 1:318ad4f36a90:
#include "mbed.h"
#define FRAMEDELIMITER 0x7E
#include "rtos.h"
// 4269
DigitalOut resetswitch(p8);
Serial xbee(p13, p14);
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);
int StartAPIMode ()
{
char reponse[4] = {42,42,42,'\0'};
wait(1);
xbee.putc('+');
xbee.putc('+');
xbee.putc('+');
wait(0.5);
int i = 0;
while (i < 4)
{
reponse[i] = xbee.getc();
pc.putc(reponse[i]);
i++;
}
return reponse[1];
}
int CalculateChecksum()
{
// Does not include frame delimiter and lenght
return 1;
}
int CalculateLenght()
{
// Calculate the number of bytes in the frame data
return 1;
}
void printhexa(char c)
{
char msb = c >> 4;
char lsb = c & 0xF;
if (msb < 10)
msb += 0x30;
else
msb += 0x37;
if (lsb < 10)
lsb += 0x30;
else
lsb += 0x37;
pc.putc('0');
pc.putc('x');
pc.putc(msb);
pc.putc(lsb);
pc.putc(' ');
}
void GetATResponse()
{
char start = xbee.getc(); // = FRAMEDELIMITER
//assert
char len_msb = xbee.getc();
char len_lsb = xbee.getc();
int len = ((int) len_msb << 4) + (int) len_lsb;
char frame_data[len];
int i = 0;
pc.printf("%d : ", len);
while (i < len)
{
if (xbee.readable())
{
frame_data[i] = xbee.getc();
printhexa(frame_data[i]);
i++;
}
}
char checksum = xbee.getc();
// Verify checksum
pc.printf(" checksum = ");
printhexa(checksum);
pc.printf("\r\n");
}
void ReadSerial()
{
// 00 13 A2 00
// 40 3E 09 63
char cmdtosend[8];
int i = 0;
cmdtosend[0] = FRAMEDELIMITER;
cmdtosend[1] = 0x00;
cmdtosend[2] = 0x04;
cmdtosend[3] = 0x08;
cmdtosend[4] = 0x52;
cmdtosend[5] = 'S'; // 0x53
cmdtosend[6] = 'L'; // 0x48
cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
while (i < 8)
{
xbee.putc(cmdtosend[i]);
i++;
}
wait(0.5);
i = 0;
cmdtosend[0] = FRAMEDELIMITER;
cmdtosend[1] = 0x00;
cmdtosend[2] = 0x04;
cmdtosend[3] = 0x08;
cmdtosend[4] = 0x52;
cmdtosend[5] = 'S'; // 0x53
cmdtosend[6] = 'H'; // 0x48
cmdtosend[7] = 0xFF - (cmdtosend[3]+cmdtosend[4]+cmdtosend[5]+cmdtosend[6]);
while (i < 8)
{
xbee.putc(cmdtosend[i]);
i++;
}
}
void xbee_reader()
{
while(1)
{
if (xbee.readable())
{
GetATResponse();
}
wait(0.001);
}
}
void tick()
{
myled = !myled;
}
int main() {
Thread thread(xbee_reader);
Ticker ticker;
ticker.attach(&tick, 1);
pc.printf("\r\n");
resetswitch = 0;
wait(0.4);
resetswitch = 1;
wait(3);
ReadSerial();
while(1) {
}
}