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.

main.cpp

Committer:
tylerjw
Date:
2012-07-23
Revision:
0:043ed5bb10f2
Child:
1:21a6da67311c

File content as of revision 0:043ed5bb10f2:

#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();
    }
}