High Altitude Recovery Payload
HARP: High Altitude Recovery Payload
Information
Version 0.1: RC design

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.
Diff: main.cpp
- 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();
+ }
+}

