Tyler Weaver
/
HARP_simple
simple (non RTOS) version of the harp parogram
main.cpp
- Committer:
- tylerjw
- Date:
- 2012-09-20
- Revision:
- 0:d4c44f8b93ea
File content as of revision 0:d4c44f8b93ea:
/** * @author Tyler Weaver * * @section LICENSE * * Copyright (c) 2012 Tyler Weaver, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * @section DESCRIPTION * * This is a simplified version of the Generation 1 HARP project. */ #include "mbed.h" #include "Servo.h" #define CENTER 100 #define LEFT 101 #define RIGHT 102 // servos Servo left_s(p21); Servo right_s(p22); Servo release(p23); // pc serial Serial pc(USBTX, USBRX); // xbee serial connection Serial xbee(p9,p10); // status leds BusOut status_led(LED4, LED3, LED2, LED1); void init(); // initalize all components void parachute(int); int main() { init(); char xbee_input_character; int control_state = CENTER; bool is_released = false; while(1) { if(xbee.readable()) { xbee_input_character = xbee.getc(); // switch input switch(xbee_input_character) { case 'L': // turn left status_led = 0x3; control_state = LEFT; break; case 'C': // center status_led = 0x6; control_state = CENTER; break; case 'R': // turn right status_led = 0xC; control_state = RIGHT; break; case 'X': // release status_led = 0xF; release = 1; control_state = CENTER; // just in case something stupid happened is_released = true; break; } } if(is_released) // dont move the parachute controlls unless released parachute(control_state); // run parachute controls } } /**************************************/ void init() { status_led = 0; // pc serial baud pc.baud(9600); status_led = 0x1; // xbee serial baud xbee.baud(9600); status_led = 0x2; // calibrate servos pc.puts("Calibrating servos...\t"); left_s.calibrate_max(0.0014); left_s.calibrate_min(-0.0008); right_s.calibrate_max(0.0016); right_s.calibrate_min(-0.0008); release.calibrate(0.0004); pc.puts("OK!\n"); status_led = 0x3; // test servos pc.puts("Testing servos...\t"); for(float i = 0.0; i <= 1.0; i+=0.1) { left_s = i; right_s = i; release = i; wait(0.5); } right_s = release = 0; left_s = 0; pc.puts("OK!\n"); status_led = 0x4; } /**************************************/ void parachute(int state) { switch(state) { case CENTER: right_s = 0; left_s = 0; break; case RIGHT: right_s = 1; left_s = 0; break; case LEFT: right_s = 0; left_s = 1; break; } }