High Altitude Recovery Payload

HARP: High Altitude Recovery Payload

Version 0.1: RC design

/media/uploads/tylerjw/_scaled_2012-07-23_mbed_xbee_breadboard.jpg

By connecting the second xbee to a computer using a terminal command and supplying the characters L, R, C, F the light patterns change on the mbed.

Revision:
0:043ed5bb10f2
Child:
1:21a6da67311c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jul 23 19:20:55 2012 +0000
@@ -0,0 +1,68 @@
+#include "mbed.h"
+#include "rtos.h"
+#include "watchdog.h"
+
+// Setup the watchdog timer
+Watchdog wdt;
+
+// xbee serial connection
+Serial xbee(p13,p14);
+
+// status leds
+BusOut status_led(LED4, LED3, LED2, LED1);
+
+typedef struct {
+    char msg;   // the direction to turn in
+} message_p;
+
+MemoryPool<message_p, 16> mpool_p;
+Queue<message_p, 16> queue_p;
+
+void xbee_thread(void const *argument) {
+    while (true) {
+        if (xbee.readable()) {
+            message_p *message = mpool_p.alloc();
+            message->msg = xbee.getc();
+
+            queue_p.put(message);
+        }
+        Thread::wait(100);
+    }
+}
+
+int main (void) {
+    status_led = 0x9;
+    // setup watchdog
+    wdt.kick(2.0); // 2 second watchdog
+    // setup xbee serial
+    xbee.baud(9600);
+
+    Thread thread1(xbee_thread);
+
+    while (true) {
+
+        osEvent evt_p = queue_p.get(1000); // wait for 1 second
+
+        if (evt_p.status == osEventMessage) {
+            message_p *message = (message_p*)evt_p.value.p;
+            printf("\nMessage from xbee: %c\n\r", message->msg);
+            switch (message->msg) {
+                case 'L': // turn left
+                    status_led = 0x3;
+                    break;
+                case 'C': // center
+                    status_led = 0x6;
+                    break;
+                case 'R': // turn right
+                    status_led = 0xC;
+                    break;
+                case 'F': // flare
+                    status_led = 0xF;
+                    break;
+            }
+
+            mpool_p.free(message);
+        }
+        wdt.kick();
+    }
+}