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 "main.h"
twmeares 0:a10cfed4fa88 2
twmeares 0:a10cfed4fa88 3 int main() {
twmeares 0:a10cfed4fa88 4 States status = PATROL;
twmeares 0:a10cfed4fa88 5 drive_stop();
twmeares 0:a10cfed4fa88 6 setup_usb();
twmeares 0:a10cfed4fa88 7 set_boardleds(0, 0, 0, 0);
twmeares 0:a10cfed4fa88 8 while(1) {
twmeares 0:a10cfed4fa88 9 switch(status) {
twmeares 0:a10cfed4fa88 10 case PATROL:
twmeares 0:a10cfed4fa88 11 status = patrol_state();
twmeares 0:a10cfed4fa88 12 break;
twmeares 0:a10cfed4fa88 13 case SEARCH:
twmeares 0:a10cfed4fa88 14 status = search_state();
twmeares 0:a10cfed4fa88 15 break;
twmeares 0:a10cfed4fa88 16 case ALERT:
twmeares 0:a10cfed4fa88 17 status = alert_state();
twmeares 0:a10cfed4fa88 18 break;
twmeares 0:a10cfed4fa88 19 }
twmeares 0:a10cfed4fa88 20 }
twmeares 0:a10cfed4fa88 21 }
twmeares 0:a10cfed4fa88 22
twmeares 0:a10cfed4fa88 23 States patrol_state() {
twmeares 0:a10cfed4fa88 24 int range = 0;
twmeares 0:a10cfed4fa88 25 lcd_newmessage("PATROL STATE.\n");
twmeares 0:a10cfed4fa88 26 set_boardleds(1, 0, 0, 0);
twmeares 0:a10cfed4fa88 27 set_rgb_f(0.0, 0.0, 1.0);
twmeares 0:a10cfed4fa88 28 range = read_distance();
twmeares 0:a10cfed4fa88 29 if(range < 40) {
twmeares 0:a10cfed4fa88 30 drive_backward();
twmeares 0:a10cfed4fa88 31 } else if(range < 80) {
twmeares 0:a10cfed4fa88 32 drive_turnRight();
twmeares 0:a10cfed4fa88 33 } else {
twmeares 0:a10cfed4fa88 34 drive_forward();
twmeares 0:a10cfed4fa88 35 }
twmeares 0:a10cfed4fa88 36 wait_ms(300);
twmeares 0:a10cfed4fa88 37
twmeares 0:a10cfed4fa88 38 if(hear_sound() ) {
twmeares 0:a10cfed4fa88 39 drive_stop();
twmeares 0:a10cfed4fa88 40 return SEARCH;
twmeares 0:a10cfed4fa88 41 } else {
twmeares 0:a10cfed4fa88 42 return PATROL;
twmeares 0:a10cfed4fa88 43 }
twmeares 0:a10cfed4fa88 44 }
twmeares 0:a10cfed4fa88 45
twmeares 0:a10cfed4fa88 46 States search_state() {
twmeares 0:a10cfed4fa88 47 static int counter = 0;
twmeares 0:a10cfed4fa88 48 if(counter == 0) {
twmeares 0:a10cfed4fa88 49 lcd_newmessage("SEARCH STATE...\n");
twmeares 0:a10cfed4fa88 50 set_boardleds(0, 1, 0, 0);
twmeares 0:a10cfed4fa88 51 set_rgb(0, 255, 255);
twmeares 0:a10cfed4fa88 52 wait_ms(5000);
twmeares 0:a10cfed4fa88 53 counter = 50;
twmeares 0:a10cfed4fa88 54 }
twmeares 0:a10cfed4fa88 55
twmeares 0:a10cfed4fa88 56 wait_ms(100);
twmeares 0:a10cfed4fa88 57 if(motion_detected() ) {
twmeares 0:a10cfed4fa88 58 set_boardleds(0, 0, 0, 1);
twmeares 0:a10cfed4fa88 59 counter = 0;
twmeares 0:a10cfed4fa88 60 return ALERT;
twmeares 0:a10cfed4fa88 61 }
twmeares 0:a10cfed4fa88 62 counter--;
twmeares 0:a10cfed4fa88 63 if(counter > 0) {
twmeares 0:a10cfed4fa88 64 return SEARCH;
twmeares 0:a10cfed4fa88 65 } else { //counter == 0
twmeares 0:a10cfed4fa88 66 return PATROL;
twmeares 0:a10cfed4fa88 67 }
twmeares 0:a10cfed4fa88 68 }
twmeares 0:a10cfed4fa88 69
twmeares 0:a10cfed4fa88 70 States alert_state() {
twmeares 0:a10cfed4fa88 71 static int counter = 0;
twmeares 0:a10cfed4fa88 72 if(counter == 0) {
twmeares 0:a10cfed4fa88 73 lcd_newmessage("ALERT STATE!!!\n");
twmeares 0:a10cfed4fa88 74 set_rgb(0, 255, 0);
twmeares 0:a10cfed4fa88 75 send_email();
twmeares 0:a10cfed4fa88 76 play_usbfile("bark.wav");
twmeares 0:a10cfed4fa88 77 }
twmeares 0:a10cfed4fa88 78
twmeares 0:a10cfed4fa88 79 set_boardleds(counter % 3, !(counter % 7), counter % 5, 1);
twmeares 0:a10cfed4fa88 80
twmeares 0:a10cfed4fa88 81 if(counter % 4 == 0) {
twmeares 0:a10cfed4fa88 82 drive_pivotLeft();
twmeares 0:a10cfed4fa88 83 } else if(counter % 4 == 2) {
twmeares 0:a10cfed4fa88 84 drive_pivotRight();
twmeares 0:a10cfed4fa88 85 }
twmeares 0:a10cfed4fa88 86
twmeares 0:a10cfed4fa88 87 wait_ms(100);
twmeares 0:a10cfed4fa88 88
twmeares 0:a10cfed4fa88 89 if(counter >= 100) {
twmeares 0:a10cfed4fa88 90 drive_stop();
twmeares 0:a10cfed4fa88 91 counter = 0;
twmeares 0:a10cfed4fa88 92 return PATROL;
twmeares 0:a10cfed4fa88 93 } else {
twmeares 0:a10cfed4fa88 94 counter++;
twmeares 0:a10cfed4fa88 95 return ALERT;
twmeares 0:a10cfed4fa88 96 }
twmeares 0:a10cfed4fa88 97 }