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.
Dependencies: LSM9DS1_Library_cal mbed XBee
Fork of FootSensor by
Revision 3:2d6ff72599f1, committed 2017-04-24
- Comitter:
- jgensel3
- Date:
- Mon Apr 24 04:05:46 2017 +0000
- Parent:
- 2:ab7b95fb52aa
- Commit message:
- a
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Wireless.h Mon Apr 24 04:05:46 2017 +0000
@@ -0,0 +1,81 @@
+#ifndef WProtocol_h
+#define WProtocol_h
+
+#include "XBee/XBee.h"
+#include <mbed.h>
+
+#define HOST_ADDRESS 0x0003
+
+enum Direction {DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT, DIR_NONE};
+enum WMessageType {FOOT_STEP, HAND_GESTURE};
+
+typedef struct WMessage {
+ WMessageType type;
+ Direction direction;
+} WMessage_t;
+
+class WirelessModule {
+public:
+ WirelessModule(PinName tx, PinName rx, WMessageType type) :
+ uart(tx, rx), xbee(uart),
+ tx16req(HOST_ADDRESS, (uint8_t *) &message, sizeof(message))
+ {
+ uart.baud(9600);
+ message.type = type;
+ }
+
+ int sendDirection(Direction dir) {
+ message.direction = dir;
+ xbee.send(tx16req);
+ return 0;
+ }
+private:
+ RawSerial uart;
+ XBee xbee;
+ WMessage_t message;
+ Tx16Request tx16req;
+};
+
+class WirelessHost {
+public:
+ WirelessHost(PinName tx, PinName rx) : uart(tx, rx), xbee(uart) {}
+
+ int waitForMessage(WMessage_t *store) {
+ xbee.readPacket(5000);
+
+ if (xbee.getResponse().isError()) {
+ // API error
+ return -99;
+ }
+
+ if (xbee.getResponse().isAvailable()) {
+ if (xbee.getResponse().getApiId() != RX_16_RESPONSE) {
+ // Unexpected API message
+ return -5;
+ }
+
+ // Retrieve response
+ xbee.getResponse().getRx16Response(rx16resp);
+
+ // Validate packet length
+ if (rx16resp.getDataLength() == sizeof(WMessage_t)) {
+ // Store the payload
+ memcpy(store, rx16resp.getData(), sizeof(WMessage_t));
+ return 0;
+ } else {
+ // Unexpected payload format
+ return -10;
+ }
+ } else {
+ // No Response
+ return -1;
+ }
+ }
+
+private:
+ RawSerial uart;
+ XBee xbee;
+ Rx16Response rx16resp;
+};
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/XBee.lib Mon Apr 24 04:05:46 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/lucasec/code/XBee/#350d308e7b77
--- a/main.cpp Sun Apr 23 19:26:07 2017 +0000
+++ b/main.cpp Mon Apr 24 04:05:46 2017 +0000
@@ -1,5 +1,6 @@
#include "mbed.h"
#include "LSM9DS1.h"
+#include "Wireless.h"
//#include "USBKeyboard.h"
#define PI 3.14159
// Earth's magnetic field varies by location. Add or subtract
@@ -13,8 +14,9 @@
DigitalOut led3(LED3);
DigitalOut led4(LED4);
Serial pc(USBTX, USBRX);
-DigitalIn pb1(p21);
+DigitalIn pb1(p17);
Timeout walkingTimer;
+WirelessModule wireless(p9, p10, FOOT_STEP);
bool isWalking = false;
// Calculate pitch, roll, and heading.
// Pitch/roll calculations taken from this app note:
@@ -27,6 +29,7 @@
void printStop()
{
// pc.printf("stop\n\r");
+ wireless.sendDirection(DIR_NONE);
isWalking = false;
}
@@ -72,7 +75,7 @@
int main()
{
//LSM9DS1 lol(p9, p10, 0x6B, 0x1E);
- LSM9DS1 IMU(p9, p10, 0xD6, 0x3C);
+ LSM9DS1 IMU(p28, p27, 0xD6, 0x3C);
pb1.mode(PullUp);
IMU.begin();
float forward;
@@ -126,20 +129,20 @@
//Detect direction and send command to main mbed
if((currHeading > 270 && currHeading < 360) && !isWalking) {
- pc.printf("walking L\n\r");
+ wireless.sendDirection(DIR_LEFT);
isWalking = true;
} else if((currHeading > 90 && currHeading < 180) && !isWalking) {
- pc.printf("walking R\n\r");
+ wireless.sendDirection(DIR_RIGHT);
isWalking = true;
} else if((currHeading > 180 && currHeading < 270) && !isWalking) {
- pc.printf("walking D\n\r");
+ wireless.sendDirection(DIR_DOWN);
isWalking = true;
} else if((currHeading > 360 || currHeading < 90) && !isWalking) {
- pc.printf("walking F\n\r");
+ wireless.sendDirection(DIR_UP);
isWalking = true;
}
}
