Racing Robots remote control using xbee and API mode

Dependencies:   XBeeLib mbed racing_robots

Committer:
sillevl
Date:
Thu May 19 13:18:03 2016 +0000
Revision:
1:47dae7bc4964
Parent:
0:cff20bebf3e4
Remote control features added to racing robots using Xbee API mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sillevl 0:cff20bebf3e4 1 #include "robot_logic.h"
sillevl 0:cff20bebf3e4 2
sillevl 0:cff20bebf3e4 3 #include <cstdint>
sillevl 0:cff20bebf3e4 4 #include "mbed.h"
sillevl 0:cff20bebf3e4 5 #include "XBeeLib.h"
sillevl 0:cff20bebf3e4 6 #if defined(ENABLE_LOGGING)
sillevl 0:cff20bebf3e4 7 #include "DigiLoggerMbedSerial.h"
sillevl 0:cff20bebf3e4 8 using namespace DigiLog;
sillevl 0:cff20bebf3e4 9 #endif
sillevl 0:cff20bebf3e4 10
sillevl 0:cff20bebf3e4 11 using namespace XBeeLib;
sillevl 0:cff20bebf3e4 12
sillevl 0:cff20bebf3e4 13 DigitalOut led1(LED1);
sillevl 0:cff20bebf3e4 14
sillevl 0:cff20bebf3e4 15 Serial *log_serial;
sillevl 0:cff20bebf3e4 16
sillevl 0:cff20bebf3e4 17 Timeout stopper;
sillevl 0:cff20bebf3e4 18
sillevl 0:cff20bebf3e4 19 /** Callback function, invoked at packet reception */
sillevl 0:cff20bebf3e4 20 static void receive_cb(const RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
sillevl 0:cff20bebf3e4 21 {
sillevl 0:cff20bebf3e4 22 const uint64_t remote_addr64 = remote.get_addr64();
sillevl 0:cff20bebf3e4 23
sillevl 0:cff20bebf3e4 24 log_serial->printf("\r\nGot a %s RX packet [%08x:%08x|%04x], len %d\r\nData: ", broadcast ? "BROADCAST" : "UNICAST", UINT64_HI32(remote_addr64), UINT64_LO32(remote_addr64), remote.get_addr16(), len);
sillevl 0:cff20bebf3e4 25
sillevl 0:cff20bebf3e4 26 for (int i = 0; i < len; i++)
sillevl 0:cff20bebf3e4 27 log_serial->printf("%02x ", data[i]);
sillevl 0:cff20bebf3e4 28
sillevl 0:cff20bebf3e4 29 log_serial->printf("\r\n");
sillevl 0:cff20bebf3e4 30
sillevl 0:cff20bebf3e4 31 switch(data[0]){
sillevl 0:cff20bebf3e4 32 case 0x10: // speed + turnradius
sillevl 0:cff20bebf3e4 33
sillevl 0:cff20bebf3e4 34 int speed = int32_t((int8_t) data[1]);
sillevl 0:cff20bebf3e4 35 int turnspeed = int32_t((int8_t) data[2]);
sillevl 0:cff20bebf3e4 36 drive(speed);
sillevl 0:cff20bebf3e4 37 turn(turnspeed);
sillevl 0:cff20bebf3e4 38 stopper.attach(&stop, 0.1);
sillevl 0:cff20bebf3e4 39 break;
sillevl 0:cff20bebf3e4 40 }
sillevl 0:cff20bebf3e4 41 }
sillevl 0:cff20bebf3e4 42
sillevl 0:cff20bebf3e4 43
sillevl 0:cff20bebf3e4 44 int speed;
sillevl 0:cff20bebf3e4 45
sillevl 0:cff20bebf3e4 46 void init()
sillevl 0:cff20bebf3e4 47 {
sillevl 0:cff20bebf3e4 48
sillevl 0:cff20bebf3e4 49 }
sillevl 0:cff20bebf3e4 50
sillevl 0:cff20bebf3e4 51 void loop()
sillevl 0:cff20bebf3e4 52 {
sillevl 0:cff20bebf3e4 53 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
sillevl 0:cff20bebf3e4 54 log_serial->baud(9600);
sillevl 0:cff20bebf3e4 55 log_serial->printf("Sample application to demo how to receive unicast and broadcast data with the XBeeZB\r\n\r\n");
sillevl 0:cff20bebf3e4 56 log_serial->printf(XB_LIB_BANNER);
sillevl 0:cff20bebf3e4 57
sillevl 0:cff20bebf3e4 58 #if defined(ENABLE_LOGGING)
sillevl 0:cff20bebf3e4 59 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
sillevl 0:cff20bebf3e4 60 #endif
sillevl 0:cff20bebf3e4 61
sillevl 0:cff20bebf3e4 62 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
sillevl 0:cff20bebf3e4 63
sillevl 0:cff20bebf3e4 64 /* Register callbacks */
sillevl 0:cff20bebf3e4 65 xbee.register_receive_cb(&receive_cb);
sillevl 0:cff20bebf3e4 66
sillevl 0:cff20bebf3e4 67 RadioStatus const radioStatus = xbee.init();
sillevl 0:cff20bebf3e4 68 MBED_ASSERT(radioStatus == Success);
sillevl 0:cff20bebf3e4 69
sillevl 0:cff20bebf3e4 70 /* Wait until the device has joined the network */
sillevl 0:cff20bebf3e4 71 log_serial->printf("Waiting for device to join the network: ");
sillevl 0:cff20bebf3e4 72 while (!xbee.is_joined()) {
sillevl 0:cff20bebf3e4 73 wait_ms(1000);
sillevl 0:cff20bebf3e4 74 log_serial->printf(".");
sillevl 0:cff20bebf3e4 75 }
sillevl 0:cff20bebf3e4 76 log_serial->printf("OK\r\n");
sillevl 0:cff20bebf3e4 77 led1 = 1;
sillevl 0:cff20bebf3e4 78
sillevl 0:cff20bebf3e4 79 while (true) {
sillevl 0:cff20bebf3e4 80 xbee.process_rx_frames();
sillevl 0:cff20bebf3e4 81 }
sillevl 0:cff20bebf3e4 82
sillevl 0:cff20bebf3e4 83 delete(log_serial);
sillevl 0:cff20bebf3e4 84
sillevl 0:cff20bebf3e4 85 }