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.

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?

UserRevisionLine numberNew 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 }