GuardDog using application board robot.
Dependencies: C12832 Ping Servo USBHost mbed wave_player_appbd
main.cpp@0:a10cfed4fa88, 2015-12-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |