application board demo program

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 WebSocketClient mbed-rpc mbed-rtos mbed

viewer

Committer:
va009039
Date:
Sat Feb 23 05:33:30 2013 +0000
Revision:
0:16e32b7dccb6
first commit

Who changed what in which revision?

UserRevisionLine numberNew 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 }