GuardDog using application board robot.
Dependencies: C12832 Ping Servo USBHost mbed wave_player_appbd
main.h
- Committer:
- twmeares
- Date:
- 2015-12-10
- Revision:
- 0:a10cfed4fa88
File content as of revision 0:a10cfed4fa88:
#include "mbed.h" #include "C12832.h" #include "USBHostMSD.h" #include "wave_player.h" #include "Servo.h" #include "Ping.h" #define BIAS 0.2030303 #define THRES 17 /* States enumated and compartmentalized into functions */ enum States { PATROL, SEARCH, ALERT }; States patrol_state(); States search_state(); States alert_state(); /* Global Variables and components */ DigitalOut board_led1(LED1); DigitalOut board_led2(LED2); DigitalOut board_led3(LED3); DigitalOut board_led4(LED4); C12832 lcd(p5, p7, p6, p8, p11); PwmOut r_led(p23); PwmOut g_led(p24); PwmOut b_led(p25); Serial pc(USBTX, USBRX); USBHostMSD* msd = 0; enum MOVE {BAD = -1, STOP, FORW, BACK, LTUR, RTUR, LPIV,RPIV }; MOVE g_movement = BAD; Servo rightServo(p21); Servo leftServo(p22); DigitalIn pir1(p29,PullUp); DigitalIn pir2(p30, PullUp); Ping ultrasonic_in(p16); AnalogIn microphone_in(p17); AnalogOut DACout(p18); PwmOut board_speaker(p23);//(p26); wave_player waver(&DACout,&board_speaker); Serial bluetooth(p9, p10); /* Helper Functions */ /* * * VISUAL FUNCTIONS * * */ void set_boardleds(int one, int two = board_led2, int thr = board_led3, int fou = board_led4) { board_led1 = (one <= 0 ? 0 : 1); board_led2 = (two <= 0 ? 0 : 1); board_led3 = (thr <= 0 ? 0 : 1); board_led4 = (fou <= 0 ? 0 : 1); } void lcd_newmessage(const char* const message) { lcd.cls(); lcd.locate(0,3); lcd.printf(message); } void set_rgb_f(float r, float g, float b) { r_led = r; g_led = g; b_led = b; } void set_rgb(unsigned int r, unsigned int g, unsigned int b) { r_led = (float)r / 255.f; g_led = (float)g / 255.f; b_led = (float)b / 255.f; } /* * * USB FUNCTIONS * * */ void setup_usb() { msd = new USBHostMSD("usb"); while(!msd->connect()) { Thread::wait(500); } } void play_file(const char * const filepath) { FILE *wave_file; wave_file=fopen(filepath,"r"); if(wave_file == NULL) { set_boardleds(1, 1, 1, 1); return; } waver.play(wave_file); fclose(wave_file); } void play_usbfile(const char * const filename) { char filepath[80]; strcpy(filepath, "/usb/"); strcat(filepath, filename); play_file(filepath); } /* * * DRIVE FUNCTIONS * * */ void drive_stop() { if(g_movement != STOP) { rightServo = 0.5; leftServo = 0.5; g_movement = STOP; } } void drive_forward() { if(g_movement != FORW) { rightServo = 0; leftServo = 1; g_movement = FORW; } } void drive_backward() { if(g_movement != BACK) { rightServo = 1; leftServo = 0; g_movement = BACK; } } void drive_turnLeft() { if(g_movement != LTUR) { rightServo = 0; leftServo = 0.5; g_movement = LTUR; } } void drive_turnRight() { if(g_movement != RTUR) { rightServo = 0.5; leftServo = 1; g_movement = RTUR; } } void drive_pivotLeft() { if(g_movement != LPIV) { rightServo = 0; leftServo = 0; g_movement = LPIV; } } void drive_pivotRight() { if(g_movement != RPIV) { rightServo = 1; leftServo = 1; g_movement = RPIV; } } /* * * SENSOR FUNCTIONS * * */ int read_distance() { int distance = -1; ultrasonic_in.Send(); wait_ms(30); distance = ultrasonic_in.Read_cm(); return distance; } int motion_detected() { return !pir1 || !pir2; //pir pulls low when motion is detected } int hear_sound() { if((microphone_in - BIAS)*500 > THRES) {//70% volume return 1; } else { return 0; } } /* * * WIRELESS FUNCTIONS * * */ void send_email() { bluetooth.printf("Send Email\n"); }