Using a websocket to control a ShiftBrite LED and a digital compass
Dependencies: EthernetInterface HMC6352 WebSocketClient mbed-rtos mbed
main.cpp
- Committer:
- wjenkins7
- Date:
- 2013-10-17
- Revision:
- 0:a670e19e5f6a
File content as of revision 0:a670e19e5f6a:
#include "mbed.h" #include "EthernetInterface.h" #include "Websocket.h" #include "HMC6352.h" HMC6352 compass(p9, p10); Serial pc(USBTX, USBRX); SPI spi(p11, p12, p13); DigitalOut latch(p15); DigitalOut enable(p16); //Function controlling the brightness of shiftbright leds void RGB_LED(int redx, int greenx, int bluex) { unsigned int low_color=0; unsigned int high_color=0; int red, green, blue; red = ((redx - 48)*25)&0x3FF ; // subtract 48 from input to read ascii code correctly blue = ((bluex - 48)*25)&0x3FF ; // scale by a factor of 25 so the LED's are brighter green = ((greenx - 48)*25)&0x3FF ; // and with 0x3FF so the colors are no more than 10 bits high_color=(blue<<4)|((red&0x3C0)>>6); low_color=(((red&0x3F)<<10)|(green)); spi.write(high_color); spi.write(low_color); latch=1; enable=1; latch=0; enable=0; wait(.25); } int main() { // set the frequency and format of the spi connection to shiftbright spi.format(16,0); spi.frequency(500000); char *r, *b, *g; int enable=0; char r1=48,b1=48,g1=48; //Declare the colors zero or off in ascii code char recv[3]; // run shiftbright function with zeros to start with shiftbright off RGB_LED((int)r1, (int)g1, (int)b1); EthernetInterface eth; eth.init(); //Use DHCP eth.connect(); //printf("IP Address is %s\n\r", eth.getIPAddress()); compass.setOpMode(HMC6352_CONTINUOUS, 1, 20); Websocket ws("ws://sockets.mbed.org:443/ws/demo/wo"); // set socket connection server address ws.connect(); // connect socket server int res = ws.send("MBED Connected"); // send msg confirming connection while (1) { // when the socket recieves information store it in recv if (ws.read(recv)) { // if first character of the msg recieved is C send compass reading to socket if(recv[0] == 'C') { float compass_reading; char reading[20]; compass_reading = compass.sample() / 10.0; snprintf(reading, sizeof(reading), "%f", compass_reading); ws.send(reading); ws.send("Heading is:"); } // when r is input the character after a space is put as the brightness of the red LED if(recv[0] == 'r') { r= strtok(recv, " "); r= strtok( NULL," "); r1 = *r; } // when b is input the character after a space is put as the brightness of the blue LED if(recv[0] == 'b') { b= strtok(recv, " "); b= strtok( NULL," "); b1 = *b; } // when g is input the character after a space is put as the brightness of the green LED if(recv[0] == 'g') { g= strtok(recv, " "); g= strtok( NULL," "); g1 = *g; } // when 0 is input the shiftbright turns all LED's off if(recv[0] == '0') { g1=48; r1=48; b1=48; } // call on the LED function everytime an input comes from the socket RGB_LED((int)r1, (int)g1, (int)b1); } } }