application board demo program
Dependencies: C12832_lcd EthernetInterface LM75B MMA7660 WebSocketClient mbed-rpc mbed-rtos mbed
main.cpp@0:16e32b7dccb6, 2013-02-23 (annotated)
- Committer:
- va009039
- Date:
- Sat Feb 23 05:33:30 2013 +0000
- Revision:
- 0:16e32b7dccb6
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:16e32b7dccb6 | 1 | // app-board-websocket-rpc/main.cpp |
va009039 | 0:16e32b7dccb6 | 2 | #include "EthernetInterface.h" |
va009039 | 0:16e32b7dccb6 | 3 | #include "Websocket.h" |
va009039 | 0:16e32b7dccb6 | 4 | #include "mbed_rpc.h" |
va009039 | 0:16e32b7dccb6 | 5 | #include "C12832_lcd.h" |
va009039 | 0:16e32b7dccb6 | 6 | #include "LM75B.h" |
va009039 | 0:16e32b7dccb6 | 7 | #include "MMA7660.h" |
va009039 | 0:16e32b7dccb6 | 8 | #include <string> |
va009039 | 0:16e32b7dccb6 | 9 | |
va009039 | 0:16e32b7dccb6 | 10 | #define CHANNEL "appboard-rpc" |
va009039 | 0:16e32b7dccb6 | 11 | #define URL "ws://sockets.mbed.org/ws/"CHANNEL"/rw" |
va009039 | 0:16e32b7dccb6 | 12 | #define VIEWER "http://va009039-mbed.appspot.com/appboard/"CHANNEL |
va009039 | 0:16e32b7dccb6 | 13 | |
va009039 | 0:16e32b7dccb6 | 14 | Serial pc(USBTX, USBRX); |
va009039 | 0:16e32b7dccb6 | 15 | C12832_LCD lcd; |
va009039 | 0:16e32b7dccb6 | 16 | LM75B LM75B_tmp(p28, p27); |
va009039 | 0:16e32b7dccb6 | 17 | MMA7660 MMA(p28, p27); |
va009039 | 0:16e32b7dccb6 | 18 | |
va009039 | 0:16e32b7dccb6 | 19 | int main() { |
va009039 | 0:16e32b7dccb6 | 20 | pc.baud(921600); |
va009039 | 0:16e32b7dccb6 | 21 | printf("%s\n", __FILE__); |
va009039 | 0:16e32b7dccb6 | 22 | |
va009039 | 0:16e32b7dccb6 | 23 | EthernetInterface eth; |
va009039 | 0:16e32b7dccb6 | 24 | eth.init(); //Use DHCP |
va009039 | 0:16e32b7dccb6 | 25 | eth.connect(); |
va009039 | 0:16e32b7dccb6 | 26 | pc.printf("IP Address is %s\n\r", eth.getIPAddress()); |
va009039 | 0:16e32b7dccb6 | 27 | |
va009039 | 0:16e32b7dccb6 | 28 | Websocket ws(URL); |
va009039 | 0:16e32b7dccb6 | 29 | ws.connect(); |
va009039 | 0:16e32b7dccb6 | 30 | |
va009039 | 0:16e32b7dccb6 | 31 | RPC::add_rpc_class<RpcDigitalOut>(); |
va009039 | 0:16e32b7dccb6 | 32 | RPC::add_rpc_class<RpcDigitalIn>(); |
va009039 | 0:16e32b7dccb6 | 33 | RPC::add_rpc_class<RpcDigitalInOut>(); |
va009039 | 0:16e32b7dccb6 | 34 | RPC::add_rpc_class<RpcAnalogIn>(); |
va009039 | 0:16e32b7dccb6 | 35 | RPC::add_rpc_class<RpcAnalogOut>(); |
va009039 | 0:16e32b7dccb6 | 36 | RPC::add_rpc_class<RpcPwmOut>(); |
va009039 | 0:16e32b7dccb6 | 37 | RPC::add_rpc_class<RpcSPI>(); |
va009039 | 0:16e32b7dccb6 | 38 | RPC::add_rpc_class<RpcSerial>(); |
va009039 | 0:16e32b7dccb6 | 39 | RPC::add_rpc_class<RpcTimer>(); |
va009039 | 0:16e32b7dccb6 | 40 | |
va009039 | 0:16e32b7dccb6 | 41 | RPC::construct<RpcDigitalOut, PinName, const char*>(LED1, "led1"); // mbed LED |
va009039 | 0:16e32b7dccb6 | 42 | RPC::construct<RpcDigitalOut, PinName, const char*>(LED2, "led2"); |
va009039 | 0:16e32b7dccb6 | 43 | RPC::construct<RpcDigitalOut, PinName, const char*>(LED3, "led3"); |
va009039 | 0:16e32b7dccb6 | 44 | RPC::construct<RpcDigitalOut, PinName, const char*>(LED4, "led4"); |
va009039 | 0:16e32b7dccb6 | 45 | |
va009039 | 0:16e32b7dccb6 | 46 | RPC::construct<RpcDigitalIn, PinName, const char*>(p12, "Down"); // Joystick |
va009039 | 0:16e32b7dccb6 | 47 | RPC::construct<RpcDigitalIn, PinName, const char*>(p13, "Left"); |
va009039 | 0:16e32b7dccb6 | 48 | RPC::construct<RpcDigitalIn, PinName, const char*>(p14, "Centre"); |
va009039 | 0:16e32b7dccb6 | 49 | RPC::construct<RpcDigitalIn, PinName, const char*>(p15, "Up"); |
va009039 | 0:16e32b7dccb6 | 50 | RPC::construct<RpcDigitalIn, PinName, const char*>(p16, "Right"); |
va009039 | 0:16e32b7dccb6 | 51 | |
va009039 | 0:16e32b7dccb6 | 52 | RPC::construct<RpcAnalogIn, PinName, const char*>(p19, "pot1"); // Potentiometers left |
va009039 | 0:16e32b7dccb6 | 53 | RPC::construct<RpcAnalogIn, PinName, const char*>(p20, "pot2"); // right |
va009039 | 0:16e32b7dccb6 | 54 | |
va009039 | 0:16e32b7dccb6 | 55 | RPC::construct<RpcPwmOut, PinName, const char*>(p23, "Red"); // RGB LED |
va009039 | 0:16e32b7dccb6 | 56 | RPC::construct<RpcPwmOut, PinName, const char*>(p24, "Green"); |
va009039 | 0:16e32b7dccb6 | 57 | RPC::construct<RpcPwmOut, PinName, const char*>(p25, "Blue"); |
va009039 | 0:16e32b7dccb6 | 58 | |
va009039 | 0:16e32b7dccb6 | 59 | pc.printf("\n\n"VIEWER"\n\n"); |
va009039 | 0:16e32b7dccb6 | 60 | |
va009039 | 0:16e32b7dccb6 | 61 | Timer t,MMA_t; |
va009039 | 0:16e32b7dccb6 | 62 | t.reset(); |
va009039 | 0:16e32b7dccb6 | 63 | t.start(); |
va009039 | 0:16e32b7dccb6 | 64 | MMA_t.reset(); |
va009039 | 0:16e32b7dccb6 | 65 | MMA_t.start(); |
va009039 | 0:16e32b7dccb6 | 66 | float pre_x,pre_y,pre_z; |
va009039 | 0:16e32b7dccb6 | 67 | float pre_pot[2] = {0.0, 0.0}; |
va009039 | 0:16e32b7dccb6 | 68 | const char* pot_name[] = {"pot1", "pot2", NULL}; |
va009039 | 0:16e32b7dccb6 | 69 | char buf[RPC_MAX_STRING], result[RPC_MAX_STRING]; |
va009039 | 0:16e32b7dccb6 | 70 | while(1) { |
va009039 | 0:16e32b7dccb6 | 71 | if (ws.read(buf)) { |
va009039 | 0:16e32b7dccb6 | 72 | pc.printf("ws.read: %s\n", buf); |
va009039 | 0:16e32b7dccb6 | 73 | lcd.locate(0, 0); |
va009039 | 0:16e32b7dccb6 | 74 | lcd.printf("rcv: %s", buf); |
va009039 | 0:16e32b7dccb6 | 75 | if (buf[0] == '/') { |
va009039 | 0:16e32b7dccb6 | 76 | RPC::call(buf, result); |
va009039 | 0:16e32b7dccb6 | 77 | pc.printf("result: %s\n", result); |
va009039 | 0:16e32b7dccb6 | 78 | ws.send(result); |
va009039 | 0:16e32b7dccb6 | 79 | } |
va009039 | 0:16e32b7dccb6 | 80 | t.reset(); |
va009039 | 0:16e32b7dccb6 | 81 | } |
va009039 | 0:16e32b7dccb6 | 82 | |
va009039 | 0:16e32b7dccb6 | 83 | for(int i = 0; pot_name[i] != NULL; i++) { |
va009039 | 0:16e32b7dccb6 | 84 | RPC* rpc = RPC::lookup(pot_name[i]); |
va009039 | 0:16e32b7dccb6 | 85 | if (rpc) { |
va009039 | 0:16e32b7dccb6 | 86 | float pot = reinterpret_cast<RpcAnalogIn*>(rpc)->read(); |
va009039 | 0:16e32b7dccb6 | 87 | if (abs(pre_pot[i] - pot) > 0.05) { |
va009039 | 0:16e32b7dccb6 | 88 | pre_pot[i] = pot; |
va009039 | 0:16e32b7dccb6 | 89 | snprintf(buf, sizeof(buf), "{\"%s\":%.2f}", pot_name[i], pot); |
va009039 | 0:16e32b7dccb6 | 90 | pc.printf("ws.send: %s\n", buf); |
va009039 | 0:16e32b7dccb6 | 91 | lcd.locate(0, 16); |
va009039 | 0:16e32b7dccb6 | 92 | lcd.printf("snd: %s", buf); |
va009039 | 0:16e32b7dccb6 | 93 | ws.send(buf); |
va009039 | 0:16e32b7dccb6 | 94 | t.reset(); |
va009039 | 0:16e32b7dccb6 | 95 | } |
va009039 | 0:16e32b7dccb6 | 96 | } |
va009039 | 0:16e32b7dccb6 | 97 | } |
va009039 | 0:16e32b7dccb6 | 98 | if (t.read() > 60) { |
va009039 | 0:16e32b7dccb6 | 99 | snprintf(buf, sizeof(buf), "{\"LM75B\":%.2f}", LM75B_tmp.read()); |
va009039 | 0:16e32b7dccb6 | 100 | pc.printf("ws.send: %s\n", buf); |
va009039 | 0:16e32b7dccb6 | 101 | ws.send(buf); |
va009039 | 0:16e32b7dccb6 | 102 | t.reset(); |
va009039 | 0:16e32b7dccb6 | 103 | } |
va009039 | 0:16e32b7dccb6 | 104 | if (MMA_t.read_ms() > 100) { |
va009039 | 0:16e32b7dccb6 | 105 | MMA_t.reset(); |
va009039 | 0:16e32b7dccb6 | 106 | float x = MMA.x(); |
va009039 | 0:16e32b7dccb6 | 107 | float y = MMA.y(); |
va009039 | 0:16e32b7dccb6 | 108 | float z = MMA.z(); |
va009039 | 0:16e32b7dccb6 | 109 | if (abs(pre_x - x) > 0.1 || abs(pre_y - y) > 0.1 || abs(pre_z - z) > 0.1) { |
va009039 | 0:16e32b7dccb6 | 110 | pre_x = x; pre_y = y; pre_z = z; |
va009039 | 0:16e32b7dccb6 | 111 | snprintf(buf, sizeof(buf), "{\"MMA7660\":{\"x\":%.2f,\"y\":%.2f,\"z\":%.2f}}", x, y, z); |
va009039 | 0:16e32b7dccb6 | 112 | lcd.locate(0, 0); |
va009039 | 0:16e32b7dccb6 | 113 | lcd.printf(buf); |
va009039 | 0:16e32b7dccb6 | 114 | pc.printf("ws.send: %s\n", buf); |
va009039 | 0:16e32b7dccb6 | 115 | } |
va009039 | 0:16e32b7dccb6 | 116 | } |
va009039 | 0:16e32b7dccb6 | 117 | //Thread::wait(100); |
va009039 | 0:16e32b7dccb6 | 118 | } |
va009039 | 0:16e32b7dccb6 | 119 | } |