GuardDog using application board robot.

Dependencies:   C12832 Ping Servo USBHost mbed wave_player_appbd

Committer:
twmeares
Date:
Thu Dec 10 06:55:09 2015 +0000
Revision:
0:a10cfed4fa88
GuardDog code for application board robot.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
twmeares 0:a10cfed4fa88 1 #include "mbed.h"
twmeares 0:a10cfed4fa88 2
twmeares 0:a10cfed4fa88 3 #include "C12832.h"
twmeares 0:a10cfed4fa88 4 #include "USBHostMSD.h"
twmeares 0:a10cfed4fa88 5 #include "wave_player.h"
twmeares 0:a10cfed4fa88 6 #include "Servo.h"
twmeares 0:a10cfed4fa88 7 #include "Ping.h"
twmeares 0:a10cfed4fa88 8
twmeares 0:a10cfed4fa88 9 #define BIAS 0.2030303
twmeares 0:a10cfed4fa88 10 #define THRES 17
twmeares 0:a10cfed4fa88 11
twmeares 0:a10cfed4fa88 12 /* States enumated and compartmentalized into functions */
twmeares 0:a10cfed4fa88 13 enum States { PATROL, SEARCH, ALERT };
twmeares 0:a10cfed4fa88 14 States patrol_state();
twmeares 0:a10cfed4fa88 15 States search_state();
twmeares 0:a10cfed4fa88 16 States alert_state();
twmeares 0:a10cfed4fa88 17
twmeares 0:a10cfed4fa88 18 /* Global Variables and components */
twmeares 0:a10cfed4fa88 19 DigitalOut board_led1(LED1);
twmeares 0:a10cfed4fa88 20 DigitalOut board_led2(LED2);
twmeares 0:a10cfed4fa88 21 DigitalOut board_led3(LED3);
twmeares 0:a10cfed4fa88 22 DigitalOut board_led4(LED4);
twmeares 0:a10cfed4fa88 23 C12832 lcd(p5, p7, p6, p8, p11);
twmeares 0:a10cfed4fa88 24 PwmOut r_led(p23);
twmeares 0:a10cfed4fa88 25 PwmOut g_led(p24);
twmeares 0:a10cfed4fa88 26 PwmOut b_led(p25);
twmeares 0:a10cfed4fa88 27
twmeares 0:a10cfed4fa88 28 Serial pc(USBTX, USBRX);
twmeares 0:a10cfed4fa88 29 USBHostMSD* msd = 0;
twmeares 0:a10cfed4fa88 30
twmeares 0:a10cfed4fa88 31 enum MOVE {BAD = -1, STOP, FORW, BACK, LTUR, RTUR, LPIV,RPIV };
twmeares 0:a10cfed4fa88 32 MOVE g_movement = BAD;
twmeares 0:a10cfed4fa88 33 Servo rightServo(p21);
twmeares 0:a10cfed4fa88 34 Servo leftServo(p22);
twmeares 0:a10cfed4fa88 35
twmeares 0:a10cfed4fa88 36 DigitalIn pir1(p29,PullUp);
twmeares 0:a10cfed4fa88 37 DigitalIn pir2(p30, PullUp);
twmeares 0:a10cfed4fa88 38 Ping ultrasonic_in(p16);
twmeares 0:a10cfed4fa88 39 AnalogIn microphone_in(p17);
twmeares 0:a10cfed4fa88 40
twmeares 0:a10cfed4fa88 41 AnalogOut DACout(p18);
twmeares 0:a10cfed4fa88 42 PwmOut board_speaker(p23);//(p26);
twmeares 0:a10cfed4fa88 43 wave_player waver(&DACout,&board_speaker);
twmeares 0:a10cfed4fa88 44 Serial bluetooth(p9, p10);
twmeares 0:a10cfed4fa88 45
twmeares 0:a10cfed4fa88 46 /* Helper Functions */
twmeares 0:a10cfed4fa88 47
twmeares 0:a10cfed4fa88 48 /* *
twmeares 0:a10cfed4fa88 49 * VISUAL FUNCTIONS *
twmeares 0:a10cfed4fa88 50 * */
twmeares 0:a10cfed4fa88 51 void set_boardleds(int one, int two = board_led2, int thr = board_led3, int fou = board_led4) {
twmeares 0:a10cfed4fa88 52 board_led1 = (one <= 0 ? 0 : 1);
twmeares 0:a10cfed4fa88 53 board_led2 = (two <= 0 ? 0 : 1);
twmeares 0:a10cfed4fa88 54 board_led3 = (thr <= 0 ? 0 : 1);
twmeares 0:a10cfed4fa88 55 board_led4 = (fou <= 0 ? 0 : 1);
twmeares 0:a10cfed4fa88 56 }
twmeares 0:a10cfed4fa88 57
twmeares 0:a10cfed4fa88 58 void lcd_newmessage(const char* const message) {
twmeares 0:a10cfed4fa88 59 lcd.cls();
twmeares 0:a10cfed4fa88 60 lcd.locate(0,3);
twmeares 0:a10cfed4fa88 61 lcd.printf(message);
twmeares 0:a10cfed4fa88 62 }
twmeares 0:a10cfed4fa88 63
twmeares 0:a10cfed4fa88 64 void set_rgb_f(float r, float g, float b) {
twmeares 0:a10cfed4fa88 65 r_led = r;
twmeares 0:a10cfed4fa88 66 g_led = g;
twmeares 0:a10cfed4fa88 67 b_led = b;
twmeares 0:a10cfed4fa88 68 }
twmeares 0:a10cfed4fa88 69
twmeares 0:a10cfed4fa88 70 void set_rgb(unsigned int r, unsigned int g, unsigned int b) {
twmeares 0:a10cfed4fa88 71 r_led = (float)r / 255.f;
twmeares 0:a10cfed4fa88 72 g_led = (float)g / 255.f;
twmeares 0:a10cfed4fa88 73 b_led = (float)b / 255.f;
twmeares 0:a10cfed4fa88 74 }
twmeares 0:a10cfed4fa88 75
twmeares 0:a10cfed4fa88 76 /* *
twmeares 0:a10cfed4fa88 77 * USB FUNCTIONS *
twmeares 0:a10cfed4fa88 78 * */
twmeares 0:a10cfed4fa88 79 void setup_usb() {
twmeares 0:a10cfed4fa88 80 msd = new USBHostMSD("usb");
twmeares 0:a10cfed4fa88 81 while(!msd->connect()) {
twmeares 0:a10cfed4fa88 82 Thread::wait(500);
twmeares 0:a10cfed4fa88 83 }
twmeares 0:a10cfed4fa88 84 }
twmeares 0:a10cfed4fa88 85
twmeares 0:a10cfed4fa88 86 void play_file(const char * const filepath) {
twmeares 0:a10cfed4fa88 87 FILE *wave_file;
twmeares 0:a10cfed4fa88 88 wave_file=fopen(filepath,"r");
twmeares 0:a10cfed4fa88 89 if(wave_file == NULL) {
twmeares 0:a10cfed4fa88 90 set_boardleds(1, 1, 1, 1);
twmeares 0:a10cfed4fa88 91 return;
twmeares 0:a10cfed4fa88 92 }
twmeares 0:a10cfed4fa88 93 waver.play(wave_file);
twmeares 0:a10cfed4fa88 94 fclose(wave_file);
twmeares 0:a10cfed4fa88 95 }
twmeares 0:a10cfed4fa88 96
twmeares 0:a10cfed4fa88 97 void play_usbfile(const char * const filename) {
twmeares 0:a10cfed4fa88 98 char filepath[80];
twmeares 0:a10cfed4fa88 99 strcpy(filepath, "/usb/");
twmeares 0:a10cfed4fa88 100 strcat(filepath, filename);
twmeares 0:a10cfed4fa88 101 play_file(filepath);
twmeares 0:a10cfed4fa88 102 }
twmeares 0:a10cfed4fa88 103
twmeares 0:a10cfed4fa88 104 /* *
twmeares 0:a10cfed4fa88 105 * DRIVE FUNCTIONS *
twmeares 0:a10cfed4fa88 106 * */
twmeares 0:a10cfed4fa88 107 void drive_stop() {
twmeares 0:a10cfed4fa88 108 if(g_movement != STOP) {
twmeares 0:a10cfed4fa88 109 rightServo = 0.5;
twmeares 0:a10cfed4fa88 110 leftServo = 0.5;
twmeares 0:a10cfed4fa88 111 g_movement = STOP;
twmeares 0:a10cfed4fa88 112 }
twmeares 0:a10cfed4fa88 113 }
twmeares 0:a10cfed4fa88 114 void drive_forward() {
twmeares 0:a10cfed4fa88 115 if(g_movement != FORW) {
twmeares 0:a10cfed4fa88 116 rightServo = 0;
twmeares 0:a10cfed4fa88 117 leftServo = 1;
twmeares 0:a10cfed4fa88 118 g_movement = FORW;
twmeares 0:a10cfed4fa88 119 }
twmeares 0:a10cfed4fa88 120 }
twmeares 0:a10cfed4fa88 121 void drive_backward() {
twmeares 0:a10cfed4fa88 122 if(g_movement != BACK) {
twmeares 0:a10cfed4fa88 123 rightServo = 1;
twmeares 0:a10cfed4fa88 124 leftServo = 0;
twmeares 0:a10cfed4fa88 125 g_movement = BACK;
twmeares 0:a10cfed4fa88 126 }
twmeares 0:a10cfed4fa88 127 }
twmeares 0:a10cfed4fa88 128 void drive_turnLeft() {
twmeares 0:a10cfed4fa88 129 if(g_movement != LTUR) {
twmeares 0:a10cfed4fa88 130 rightServo = 0;
twmeares 0:a10cfed4fa88 131 leftServo = 0.5;
twmeares 0:a10cfed4fa88 132 g_movement = LTUR;
twmeares 0:a10cfed4fa88 133 }
twmeares 0:a10cfed4fa88 134 }
twmeares 0:a10cfed4fa88 135 void drive_turnRight() {
twmeares 0:a10cfed4fa88 136 if(g_movement != RTUR) {
twmeares 0:a10cfed4fa88 137 rightServo = 0.5;
twmeares 0:a10cfed4fa88 138 leftServo = 1;
twmeares 0:a10cfed4fa88 139 g_movement = RTUR;
twmeares 0:a10cfed4fa88 140 }
twmeares 0:a10cfed4fa88 141 }
twmeares 0:a10cfed4fa88 142 void drive_pivotLeft() {
twmeares 0:a10cfed4fa88 143 if(g_movement != LPIV) {
twmeares 0:a10cfed4fa88 144 rightServo = 0;
twmeares 0:a10cfed4fa88 145 leftServo = 0;
twmeares 0:a10cfed4fa88 146 g_movement = LPIV;
twmeares 0:a10cfed4fa88 147 }
twmeares 0:a10cfed4fa88 148 }
twmeares 0:a10cfed4fa88 149 void drive_pivotRight() {
twmeares 0:a10cfed4fa88 150 if(g_movement != RPIV) {
twmeares 0:a10cfed4fa88 151 rightServo = 1;
twmeares 0:a10cfed4fa88 152 leftServo = 1;
twmeares 0:a10cfed4fa88 153 g_movement = RPIV;
twmeares 0:a10cfed4fa88 154 }
twmeares 0:a10cfed4fa88 155 }
twmeares 0:a10cfed4fa88 156
twmeares 0:a10cfed4fa88 157 /* *
twmeares 0:a10cfed4fa88 158 * SENSOR FUNCTIONS *
twmeares 0:a10cfed4fa88 159 * */
twmeares 0:a10cfed4fa88 160 int read_distance() {
twmeares 0:a10cfed4fa88 161 int distance = -1;
twmeares 0:a10cfed4fa88 162 ultrasonic_in.Send();
twmeares 0:a10cfed4fa88 163 wait_ms(30);
twmeares 0:a10cfed4fa88 164 distance = ultrasonic_in.Read_cm();
twmeares 0:a10cfed4fa88 165 return distance;
twmeares 0:a10cfed4fa88 166 }
twmeares 0:a10cfed4fa88 167 int motion_detected() {
twmeares 0:a10cfed4fa88 168 return !pir1 || !pir2; //pir pulls low when motion is detected
twmeares 0:a10cfed4fa88 169 }
twmeares 0:a10cfed4fa88 170
twmeares 0:a10cfed4fa88 171 int hear_sound() {
twmeares 0:a10cfed4fa88 172 if((microphone_in - BIAS)*500 > THRES) {//70% volume
twmeares 0:a10cfed4fa88 173 return 1;
twmeares 0:a10cfed4fa88 174 } else {
twmeares 0:a10cfed4fa88 175 return 0;
twmeares 0:a10cfed4fa88 176 }
twmeares 0:a10cfed4fa88 177 }
twmeares 0:a10cfed4fa88 178
twmeares 0:a10cfed4fa88 179 /* *
twmeares 0:a10cfed4fa88 180 * WIRELESS FUNCTIONS *
twmeares 0:a10cfed4fa88 181 * */
twmeares 0:a10cfed4fa88 182 void send_email() {
twmeares 0:a10cfed4fa88 183 bluetooth.printf("Send Email\n");
twmeares 0:a10cfed4fa88 184 }