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
camera.h
- Committer:
- impguard
- Date:
- 2014-12-19
- Revision:
- 0:4a30986db2fb
File content as of revision 0:4a30986db2fb:
/** * * Code to get data from the camera by connecting to a web server via WiFi (using Adafruit CC3000). * * author: Leo Kam * * * The code to connect to the web via Adafruit is adapted from the code by Ben Zhang and Antonio Iannopollo, found at * http://developer.mbed.org/users/nebgnahz/code/CC3000_demo/ * The following libraries are used: * - cc3000_hostdriver_mbedsocket * (http://developer.mbed.org/users/Kojto/code/cc3000_hostdriver_mbedsocket/) * - HTTPClient (http://developer.mbed.org/users/donatien/code/HTTPClient/) * **/ #include "mbed.h" #include "cc3000.h" #include "HTTPClient.h" // KL25Z wifi connection // we need to define connection pins for: // - IRQ => (pin D3) // - Enable => (pin D5) // - SPI CS => (pin D10) // - SPI MOSI => (pin D11) // - SPI MISO => (pin D12) // - SPI CLK => (pin D13) // plus wifi network SSID, password, security level and smart-configuration flag. mbed_cc3000::cc3000 wifi(D3, D5, D10, SPI(D11, D12, D13), "EECS-PSK", "Thequickbrown", WPA2, false); // create an http instance HTTPClient http; // str is used to hold the response data char str[512]; char * p; // setup the serial connection, and LEDs Serial pc(USBTX, USBRX); DigitalOut led_red(LED_RED); DigitalOut led_green(LED_GREEN); void initializeWiFi() { // by default, it's red led_red = 0; led_green = 1; //print message to indicate the program has started pc.printf("CC3000 Sample Program\r\n"); wifi.init(); pc.printf("Wifi Initialized\r\n"); // check connection status while(wifi.is_connected() == false) { // try to connect if (wifi.connect() == -1) { pc.printf("Failed to connect." "Please verify connection details and try again.\r\n"); led_red = 0; led_green = 1; } else { pc.printf("IP address: %s \r\n", wifi.getIPAddress()); //once connected, turn green LED on and red LED off, and exit loop led_red = 1; led_green = 0; break; } } } /* 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. */ bool getCameraData(double &x, double &y, double &z, int timeout=2000) { // check connection status while(wifi.is_connected() == false) { // try to connect if (wifi.connect() == -1) { pc.printf("Failed to connect." "Please verify connection details and try again.\r\n"); led_red = 0; led_green = 1; } else { pc.printf("IP address: %s \r\n", wifi.getIPAddress()); //once connected, turn green LED on and red LED off, and exit loop led_red = 1; led_green = 0; break; } } int ret = http.get("https://pew-pew-pew.herokuapp.com/position", str, 512); if (!ret) { p = strtok(str, " "); x = atof(p); p = strtok(NULL, " "); y = atof(p); p = strtok(NULL, " "); z = atof(p); pc.printf("Camera data: %f %f %f\r\n", x, y, z); return true; } else { /*pc.printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode());*/ return false; } }