A WiFiDipCortex based robot. Control is via sockets over WiFi. See also: https://github.com/mfurseman/robo-android

Dependencies:   Motordriver USBDevice cc3000_hostdriver_mbedsocket_hacked mbed

Files at this revision

API Documentation at this revision

Comitter:
mfurseman
Date:
Wed Nov 12 22:45:59 2014 +0000
Parent:
3:ba11f6207550
Child:
5:7f5fcee1737d
Commit message:
Working with external PWM LED

Changed in this revision

Motordriver.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Motordriver.lib	Wed Nov 12 22:45:59 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/littlexc/code/Motordriver/#3110b9209d3c
--- a/main.cpp	Fri Oct 31 23:27:35 2014 +0000
+++ b/main.cpp	Wed Nov 12 22:45:59 2014 +0000
@@ -1,15 +1,18 @@
-#include "mbed.h"
+#include <stdint.h>
+#include <mbed.h>
+#include "motordriver.h"
 #include "cc3000.h"
 #include "TCPSocketConnection.h"
 #include "TCPSocketServer.h"
 
+
 /* MAC 08:00:28:57:43:b8 */
 
 /* Quickly change debug flag to remove USB serial code */
 //#define DEBUG
 #ifdef DEBUG
 #include "USBSerial.h"
-USBSerial serial;  // This must be instantiated in main
+USBSerial serial;
 #define debug(x, ...) serial.printf(x, ##__VA_ARGS__);
 #else
 #define debug(x, ...)
@@ -17,9 +20,10 @@
 
 /* Client commands */
 #define CMD_NULL 0
-#define CMD_C_ECHO 97
+#define CMD_C_ECHO 0x61  // 'a'
 #define CMD_C_LED_ON 98
 #define CMD_C_LED_OFF 99
+#define CMD_C_PRINT_UINT32 100
 
 
 using namespace mbed_cc3000;
@@ -28,6 +32,9 @@
 /* On board LED */
 DigitalOut led(P0_1);
 
+/* External LED - Pin 1 */
+PwmOut pwm_led(P0_8);  // Pin 15
+
 /* Serial library for WiFi module */
 cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37));
 
@@ -92,6 +99,9 @@
     connectWifi();
     debug("Completed connectWifi()\r\n");
     printConnectionInfo();
+    
+    debug("Setting led pwm to 0\r\n");
+    pwm_led.period_ms(1);  // 1 kHz
 
     while(1) {
         debug("\r\nOne second client attachment loop\r\n");
@@ -99,7 +109,7 @@
 
         debug("Creating server and client sockets\r\n");
         wait_ms(15);
-        TCPSocketConnection client; // is_connected not reliable when using non-blocking sockets
+        TCPSocketConnection client;
         TCPSocketServer server;
         int32_t status;
 
@@ -144,16 +154,28 @@
                             led = 0;
                             break;
                             
+                        case CMD_C_PRINT_UINT32:
+                            wait_ms(15);
+                            uint32_t int_buffer;
+                            client.set_blocking(false, 2000);
+                            status = client.receive_all((char*)&int_buffer, sizeof(int_buffer)); // 4 Bytes
+                            debug("Command print int32 recieved: %u with status: %d\r\n", int_buffer, status);
+                            int_buffer = ntohl(int_buffer);
+                            debug("Converted to host byte order: %u\r\n", int_buffer);
+                            debug("Conversion of int to float: %f\r\n", ((int_buffer*1.0f) / ((uint32_t)-1)));
+                            pwm_led = ((int_buffer*1.0f) / ((uint32_t)-1));
+                            break;
+                            
                         default:
                             debug("Command %d not recognised\r\n", command);
                             break;
                     }
                 }
-
+ 
                 wait_ms(15);
                 /* Check to see if the non-blocking socket is closed */
                 if((n_timeout++) % 100 == 0) {
-                    client.set_blocking(false, 1000); //  5 ms time out is min for CC3000
+                    client.set_blocking(false, 1000);
                     status = client.send("abc\r\n", 5);
                     debug("Single byte send returned with status %d\r\n", status);
                     if(status < 0) {