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.
main.cpp@0:043ed5bb10f2, 2012-07-23 (annotated)
- Committer:
- tylerjw
- Date:
- Mon Jul 23 19:20:55 2012 +0000
- Revision:
- 0:043ed5bb10f2
- Child:
- 1:21a6da67311c
0.1 LED change with serial xbee connection
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tylerjw | 0:043ed5bb10f2 | 1 | #include "mbed.h" |
tylerjw | 0:043ed5bb10f2 | 2 | #include "rtos.h" |
tylerjw | 0:043ed5bb10f2 | 3 | #include "watchdog.h" |
tylerjw | 0:043ed5bb10f2 | 4 | |
tylerjw | 0:043ed5bb10f2 | 5 | // Setup the watchdog timer |
tylerjw | 0:043ed5bb10f2 | 6 | Watchdog wdt; |
tylerjw | 0:043ed5bb10f2 | 7 | |
tylerjw | 0:043ed5bb10f2 | 8 | // xbee serial connection |
tylerjw | 0:043ed5bb10f2 | 9 | Serial xbee(p13,p14); |
tylerjw | 0:043ed5bb10f2 | 10 | |
tylerjw | 0:043ed5bb10f2 | 11 | // status leds |
tylerjw | 0:043ed5bb10f2 | 12 | BusOut status_led(LED4, LED3, LED2, LED1); |
tylerjw | 0:043ed5bb10f2 | 13 | |
tylerjw | 0:043ed5bb10f2 | 14 | typedef struct { |
tylerjw | 0:043ed5bb10f2 | 15 | char msg; // the direction to turn in |
tylerjw | 0:043ed5bb10f2 | 16 | } message_p; |
tylerjw | 0:043ed5bb10f2 | 17 | |
tylerjw | 0:043ed5bb10f2 | 18 | MemoryPool<message_p, 16> mpool_p; |
tylerjw | 0:043ed5bb10f2 | 19 | Queue<message_p, 16> queue_p; |
tylerjw | 0:043ed5bb10f2 | 20 | |
tylerjw | 0:043ed5bb10f2 | 21 | void xbee_thread(void const *argument) { |
tylerjw | 0:043ed5bb10f2 | 22 | while (true) { |
tylerjw | 0:043ed5bb10f2 | 23 | if (xbee.readable()) { |
tylerjw | 0:043ed5bb10f2 | 24 | message_p *message = mpool_p.alloc(); |
tylerjw | 0:043ed5bb10f2 | 25 | message->msg = xbee.getc(); |
tylerjw | 0:043ed5bb10f2 | 26 | |
tylerjw | 0:043ed5bb10f2 | 27 | queue_p.put(message); |
tylerjw | 0:043ed5bb10f2 | 28 | } |
tylerjw | 0:043ed5bb10f2 | 29 | Thread::wait(100); |
tylerjw | 0:043ed5bb10f2 | 30 | } |
tylerjw | 0:043ed5bb10f2 | 31 | } |
tylerjw | 0:043ed5bb10f2 | 32 | |
tylerjw | 0:043ed5bb10f2 | 33 | int main (void) { |
tylerjw | 0:043ed5bb10f2 | 34 | status_led = 0x9; |
tylerjw | 0:043ed5bb10f2 | 35 | // setup watchdog |
tylerjw | 0:043ed5bb10f2 | 36 | wdt.kick(2.0); // 2 second watchdog |
tylerjw | 0:043ed5bb10f2 | 37 | // setup xbee serial |
tylerjw | 0:043ed5bb10f2 | 38 | xbee.baud(9600); |
tylerjw | 0:043ed5bb10f2 | 39 | |
tylerjw | 0:043ed5bb10f2 | 40 | Thread thread1(xbee_thread); |
tylerjw | 0:043ed5bb10f2 | 41 | |
tylerjw | 0:043ed5bb10f2 | 42 | while (true) { |
tylerjw | 0:043ed5bb10f2 | 43 | |
tylerjw | 0:043ed5bb10f2 | 44 | osEvent evt_p = queue_p.get(1000); // wait for 1 second |
tylerjw | 0:043ed5bb10f2 | 45 | |
tylerjw | 0:043ed5bb10f2 | 46 | if (evt_p.status == osEventMessage) { |
tylerjw | 0:043ed5bb10f2 | 47 | message_p *message = (message_p*)evt_p.value.p; |
tylerjw | 0:043ed5bb10f2 | 48 | printf("\nMessage from xbee: %c\n\r", message->msg); |
tylerjw | 0:043ed5bb10f2 | 49 | switch (message->msg) { |
tylerjw | 0:043ed5bb10f2 | 50 | case 'L': // turn left |
tylerjw | 0:043ed5bb10f2 | 51 | status_led = 0x3; |
tylerjw | 0:043ed5bb10f2 | 52 | break; |
tylerjw | 0:043ed5bb10f2 | 53 | case 'C': // center |
tylerjw | 0:043ed5bb10f2 | 54 | status_led = 0x6; |
tylerjw | 0:043ed5bb10f2 | 55 | break; |
tylerjw | 0:043ed5bb10f2 | 56 | case 'R': // turn right |
tylerjw | 0:043ed5bb10f2 | 57 | status_led = 0xC; |
tylerjw | 0:043ed5bb10f2 | 58 | break; |
tylerjw | 0:043ed5bb10f2 | 59 | case 'F': // flare |
tylerjw | 0:043ed5bb10f2 | 60 | status_led = 0xF; |
tylerjw | 0:043ed5bb10f2 | 61 | break; |
tylerjw | 0:043ed5bb10f2 | 62 | } |
tylerjw | 0:043ed5bb10f2 | 63 | |
tylerjw | 0:043ed5bb10f2 | 64 | mpool_p.free(message); |
tylerjw | 0:043ed5bb10f2 | 65 | } |
tylerjw | 0:043ed5bb10f2 | 66 | wdt.kick(); |
tylerjw | 0:043ed5bb10f2 | 67 | } |
tylerjw | 0:043ed5bb10f2 | 68 | } |