The controller for a NERF turret, allowing it to track and fire at a human face with visual input gotten by polling a web server. This is part of the final project of the EE149 course of UC Berkeley. The project name is "Pew Pew".

Dependencies:   HTTPClient TSI cc3000_hostdriver_mbedsocket mbed

Committer:
impguard
Date:
Fri Dec 19 11:49:27 2014 +0000
Revision:
0:4a30986db2fb
Final version of the controller for the NERF turret.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
impguard 0:4a30986db2fb 1 /**
impguard 0:4a30986db2fb 2 *
impguard 0:4a30986db2fb 3 * Code to get data from the camera by connecting to a web server via WiFi (using Adafruit CC3000).
impguard 0:4a30986db2fb 4 *
impguard 0:4a30986db2fb 5 * author: Leo Kam
impguard 0:4a30986db2fb 6 *
impguard 0:4a30986db2fb 7 *
impguard 0:4a30986db2fb 8 * The code to connect to the web via Adafruit is adapted from the code by Ben Zhang and Antonio Iannopollo, found at
impguard 0:4a30986db2fb 9 * http://developer.mbed.org/users/nebgnahz/code/CC3000_demo/
impguard 0:4a30986db2fb 10 * The following libraries are used:
impguard 0:4a30986db2fb 11 * - cc3000_hostdriver_mbedsocket
impguard 0:4a30986db2fb 12 * (http://developer.mbed.org/users/Kojto/code/cc3000_hostdriver_mbedsocket/)
impguard 0:4a30986db2fb 13 * - HTTPClient (http://developer.mbed.org/users/donatien/code/HTTPClient/)
impguard 0:4a30986db2fb 14 *
impguard 0:4a30986db2fb 15 **/
impguard 0:4a30986db2fb 16
impguard 0:4a30986db2fb 17
impguard 0:4a30986db2fb 18 #include "mbed.h"
impguard 0:4a30986db2fb 19 #include "cc3000.h"
impguard 0:4a30986db2fb 20 #include "HTTPClient.h"
impguard 0:4a30986db2fb 21
impguard 0:4a30986db2fb 22 // KL25Z wifi connection
impguard 0:4a30986db2fb 23 // we need to define connection pins for:
impguard 0:4a30986db2fb 24 // - IRQ => (pin D3)
impguard 0:4a30986db2fb 25 // - Enable => (pin D5)
impguard 0:4a30986db2fb 26 // - SPI CS => (pin D10)
impguard 0:4a30986db2fb 27 // - SPI MOSI => (pin D11)
impguard 0:4a30986db2fb 28 // - SPI MISO => (pin D12)
impguard 0:4a30986db2fb 29 // - SPI CLK => (pin D13)
impguard 0:4a30986db2fb 30 // plus wifi network SSID, password, security level and smart-configuration flag.
impguard 0:4a30986db2fb 31 mbed_cc3000::cc3000 wifi(D3, D5, D10, SPI(D11, D12, D13),
impguard 0:4a30986db2fb 32 "EECS-PSK", "Thequickbrown", WPA2, false);
impguard 0:4a30986db2fb 33
impguard 0:4a30986db2fb 34 // create an http instance
impguard 0:4a30986db2fb 35 HTTPClient http;
impguard 0:4a30986db2fb 36
impguard 0:4a30986db2fb 37 // str is used to hold the response data
impguard 0:4a30986db2fb 38 char str[512];
impguard 0:4a30986db2fb 39 char * p;
impguard 0:4a30986db2fb 40
impguard 0:4a30986db2fb 41 // setup the serial connection, and LEDs
impguard 0:4a30986db2fb 42 Serial pc(USBTX, USBRX);
impguard 0:4a30986db2fb 43 DigitalOut led_red(LED_RED);
impguard 0:4a30986db2fb 44 DigitalOut led_green(LED_GREEN);
impguard 0:4a30986db2fb 45
impguard 0:4a30986db2fb 46 void initializeWiFi() {
impguard 0:4a30986db2fb 47 // by default, it's red
impguard 0:4a30986db2fb 48 led_red = 0;
impguard 0:4a30986db2fb 49 led_green = 1;
impguard 0:4a30986db2fb 50
impguard 0:4a30986db2fb 51 //print message to indicate the program has started
impguard 0:4a30986db2fb 52 pc.printf("CC3000 Sample Program\r\n");
impguard 0:4a30986db2fb 53 wifi.init();
impguard 0:4a30986db2fb 54 pc.printf("Wifi Initialized\r\n");
impguard 0:4a30986db2fb 55
impguard 0:4a30986db2fb 56 // check connection status
impguard 0:4a30986db2fb 57 while(wifi.is_connected() == false) {
impguard 0:4a30986db2fb 58 // try to connect
impguard 0:4a30986db2fb 59 if (wifi.connect() == -1) {
impguard 0:4a30986db2fb 60 pc.printf("Failed to connect."
impguard 0:4a30986db2fb 61 "Please verify connection details and try again.\r\n");
impguard 0:4a30986db2fb 62 led_red = 0;
impguard 0:4a30986db2fb 63 led_green = 1;
impguard 0:4a30986db2fb 64 } else {
impguard 0:4a30986db2fb 65 pc.printf("IP address: %s \r\n", wifi.getIPAddress());
impguard 0:4a30986db2fb 66
impguard 0:4a30986db2fb 67 //once connected, turn green LED on and red LED off, and exit loop
impguard 0:4a30986db2fb 68 led_red = 1;
impguard 0:4a30986db2fb 69 led_green = 0;
impguard 0:4a30986db2fb 70 break;
impguard 0:4a30986db2fb 71 }
impguard 0:4a30986db2fb 72 }
impguard 0:4a30986db2fb 73 }
impguard 0:4a30986db2fb 74
impguard 0:4a30986db2fb 75
impguard 0:4a30986db2fb 76 /* Get the x, y-coordinates and depth from camera. Return true if successfuly retrieve data from server, else return false and do not change parameters. */
impguard 0:4a30986db2fb 77 bool getCameraData(double &x, double &y, double &z, int timeout=2000) {
impguard 0:4a30986db2fb 78 // check connection status
impguard 0:4a30986db2fb 79 while(wifi.is_connected() == false) {
impguard 0:4a30986db2fb 80 // try to connect
impguard 0:4a30986db2fb 81 if (wifi.connect() == -1) {
impguard 0:4a30986db2fb 82 pc.printf("Failed to connect."
impguard 0:4a30986db2fb 83 "Please verify connection details and try again.\r\n");
impguard 0:4a30986db2fb 84 led_red = 0;
impguard 0:4a30986db2fb 85 led_green = 1;
impguard 0:4a30986db2fb 86 } else {
impguard 0:4a30986db2fb 87 pc.printf("IP address: %s \r\n", wifi.getIPAddress());
impguard 0:4a30986db2fb 88
impguard 0:4a30986db2fb 89 //once connected, turn green LED on and red LED off, and exit loop
impguard 0:4a30986db2fb 90 led_red = 1;
impguard 0:4a30986db2fb 91 led_green = 0;
impguard 0:4a30986db2fb 92 break;
impguard 0:4a30986db2fb 93 }
impguard 0:4a30986db2fb 94 }
impguard 0:4a30986db2fb 95 int ret = http.get("https://pew-pew-pew.herokuapp.com/position", str, 512);
impguard 0:4a30986db2fb 96 if (!ret) {
impguard 0:4a30986db2fb 97 p = strtok(str, " ");
impguard 0:4a30986db2fb 98 x = atof(p);
impguard 0:4a30986db2fb 99 p = strtok(NULL, " ");
impguard 0:4a30986db2fb 100 y = atof(p);
impguard 0:4a30986db2fb 101 p = strtok(NULL, " ");
impguard 0:4a30986db2fb 102 z = atof(p);
impguard 0:4a30986db2fb 103 pc.printf("Camera data: %f %f %f\r\n", x, y, z);
impguard 0:4a30986db2fb 104 return true;
impguard 0:4a30986db2fb 105 } else {
impguard 0:4a30986db2fb 106 /*pc.printf("Error - ret = %d - HTTP return code = %d\r\n",
impguard 0:4a30986db2fb 107 ret,
impguard 0:4a30986db2fb 108 http.getHTTPResponseCode());*/
impguard 0:4a30986db2fb 109 return false;
impguard 0:4a30986db2fb 110 }
impguard 0:4a30986db2fb 111 }