NNN40_CLI_HOST_WIFI : 1.0.3. NNN40 CLI host demo code.LPC1768 is CLI host, P9 (TX)/P10 (RX), baud reate : 115200
Dependencies: C12832 mbed-rtos mbed websocket_demo
Fork of NNN40_CLI_HOST_WIFI by
- TEST_TCP_CLIENT (1) => NNN40 is in client mode
- TEST_TCP_CLIENT (0) => NNN40 is in server mode
main.cpp@9:999997e8e4cc, 2015-02-12 (annotated)
- Committer:
- gordonlu
- Date:
- Thu Feb 12 01:57:25 2015 +0000
- Revision:
- 9:999997e8e4cc
- Parent:
- 8:421c13d323a0
- Child:
- 10:a0dc152a0060
Initial version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gordonlu | 7:71124ec77f83 | 1 | #include "mbed.h" |
gordonlu | 7:71124ec77f83 | 2 | #include "rtos.h" |
gordonlu | 7:71124ec77f83 | 3 | #include "C12832.h" |
gordonlu | 8:421c13d323a0 | 4 | #include "EthernetInterface.h" |
gordonlu | 8:421c13d323a0 | 5 | #include "math.h" |
gordonlu | 9:999997e8e4cc | 6 | #include "Websocket.h" |
gordonlu | 7:71124ec77f83 | 7 | |
gordonlu | 9:999997e8e4cc | 8 | #define POT_SENSITIVITY (0.01f) |
gordonlu | 9:999997e8e4cc | 9 | #define WS_CONNECT_RETRY (20) |
gordonlu | 9:999997e8e4cc | 10 | #define WS_SEND_RETRY (5) |
gordonlu | 9:999997e8e4cc | 11 | |
gordonlu | 7:71124ec77f83 | 12 | C12832 lcd(p5, p7, p6, p8, p11); |
gordonlu | 7:71124ec77f83 | 13 | DigitalOut myled1(LED1); |
gordonlu | 7:71124ec77f83 | 14 | DigitalOut myled2(LED2); |
gordonlu | 7:71124ec77f83 | 15 | DigitalOut myled3(LED3); |
gordonlu | 7:71124ec77f83 | 16 | DigitalOut myled4(LED4); |
gordonlu | 7:71124ec77f83 | 17 | PwmOut r (p23); |
gordonlu | 7:71124ec77f83 | 18 | PwmOut g (p24); |
gordonlu | 7:71124ec77f83 | 19 | PwmOut b (p25); |
gordonlu | 7:71124ec77f83 | 20 | AnalogIn pot1(p19); |
gordonlu | 7:71124ec77f83 | 21 | AnalogIn pot2(p20); |
gordonlu | 7:71124ec77f83 | 22 | BusIn joystick(p12, p13, p14, p15, p16); |
gordonlu | 8:421c13d323a0 | 23 | |
gordonlu | 8:421c13d323a0 | 24 | Mutex lcd_mutex; |
gordonlu | 9:999997e8e4cc | 25 | Mutex second_mutex; |
gordonlu | 7:71124ec77f83 | 26 | |
gordonlu | 9:999997e8e4cc | 27 | static unsigned int second = 0; |
gordonlu | 9:999997e8e4cc | 28 | static float pt1 = 0; |
gordonlu | 9:999997e8e4cc | 29 | static float pt2 = 0; |
gordonlu | 9:999997e8e4cc | 30 | static int js = 0xFF; |
gordonlu | 7:71124ec77f83 | 31 | |
gordonlu | 8:421c13d323a0 | 32 | void potJoystickThread(void const *args) |
gordonlu | 8:421c13d323a0 | 33 | { |
gordonlu | 9:999997e8e4cc | 34 | |
gordonlu | 8:421c13d323a0 | 35 | |
gordonlu | 8:421c13d323a0 | 36 | printf("PotJoysticThread Start\r\n"); |
gordonlu | 8:421c13d323a0 | 37 | |
gordonlu | 8:421c13d323a0 | 38 | while(1) |
gordonlu | 8:421c13d323a0 | 39 | { |
gordonlu | 8:421c13d323a0 | 40 | |
gordonlu | 8:421c13d323a0 | 41 | float p1 = pot1.read(); |
gordonlu | 8:421c13d323a0 | 42 | float p2 = pot2.read(); |
gordonlu | 8:421c13d323a0 | 43 | int j = joystick.read(); |
gordonlu | 8:421c13d323a0 | 44 | |
gordonlu | 8:421c13d323a0 | 45 | if(fabs(p1 - pt1) > POT_SENSITIVITY || fabs(p2 - pt2) > POT_SENSITIVITY || j != js) |
gordonlu | 8:421c13d323a0 | 46 | { |
gordonlu | 8:421c13d323a0 | 47 | pt1 = p1; |
gordonlu | 8:421c13d323a0 | 48 | pt2 = p2; |
gordonlu | 8:421c13d323a0 | 49 | js = j; |
gordonlu | 8:421c13d323a0 | 50 | |
gordonlu | 8:421c13d323a0 | 51 | r = 1 - pt1; |
gordonlu | 8:421c13d323a0 | 52 | g = 1 - pt2; |
gordonlu | 8:421c13d323a0 | 53 | |
gordonlu | 8:421c13d323a0 | 54 | if(0x10 == js)b = 0; //right, turn on blue led |
gordonlu | 8:421c13d323a0 | 55 | else if (0x02 == js) b = 1; //left, turn of blue led |
gordonlu | 8:421c13d323a0 | 56 | else if(0x01 == js) b.write( b + 0.05); //down |
gordonlu | 8:421c13d323a0 | 57 | else if(0x08 == js) b.write( b - 0.05); //up |
gordonlu | 8:421c13d323a0 | 58 | |
gordonlu | 9:999997e8e4cc | 59 | //printf("Pot1 : %.2f Pot2 : %.2f Joystick:%02X\r\n", pt1, pt2, js); |
gordonlu | 8:421c13d323a0 | 60 | |
gordonlu | 8:421c13d323a0 | 61 | //lcd display |
gordonlu | 8:421c13d323a0 | 62 | lcd_mutex.lock(); |
gordonlu | 8:421c13d323a0 | 63 | lcd.locate(0,11); |
gordonlu | 8:421c13d323a0 | 64 | lcd.printf("Pot1 : %.2f Pot2 : %.2f JS:%02X", pt1, pt2, js); |
gordonlu | 8:421c13d323a0 | 65 | lcd_mutex.unlock(); |
gordonlu | 8:421c13d323a0 | 66 | } |
gordonlu | 8:421c13d323a0 | 67 | |
gordonlu | 8:421c13d323a0 | 68 | Thread::wait(100); |
gordonlu | 8:421c13d323a0 | 69 | } |
gordonlu | 8:421c13d323a0 | 70 | |
gordonlu | 8:421c13d323a0 | 71 | } |
gordonlu | 8:421c13d323a0 | 72 | |
gordonlu | 8:421c13d323a0 | 73 | void netThread(void const *args) |
gordonlu | 8:421c13d323a0 | 74 | { |
gordonlu | 9:999997e8e4cc | 75 | bool is_eth_connected = false; |
gordonlu | 8:421c13d323a0 | 76 | printf("EthernetInterface Thread Start\r\n"); |
gordonlu | 8:421c13d323a0 | 77 | EthernetInterface eth; |
gordonlu | 8:421c13d323a0 | 78 | eth.init(); //Use DHCP |
gordonlu | 8:421c13d323a0 | 79 | printf("MAC:%s\r\n",eth.getMACAddress()); |
gordonlu | 9:999997e8e4cc | 80 | lcd_mutex.lock(); |
gordonlu | 8:421c13d323a0 | 81 | lcd.locate(0,21); |
gordonlu | 8:421c13d323a0 | 82 | lcd.printf("MAC:%s\r\n",eth.getMACAddress()); |
gordonlu | 9:999997e8e4cc | 83 | lcd_mutex.unlock(); |
gordonlu | 8:421c13d323a0 | 84 | printf("Connecting...\r\n"); |
gordonlu | 8:421c13d323a0 | 85 | |
gordonlu | 8:421c13d323a0 | 86 | while(1) |
gordonlu | 8:421c13d323a0 | 87 | { |
gordonlu | 8:421c13d323a0 | 88 | if(0 != eth.connect()) |
gordonlu | 8:421c13d323a0 | 89 | { |
gordonlu | 8:421c13d323a0 | 90 | printf("Connecting fail! Try again. \r\nConnecting....\r\n"); |
gordonlu | 9:999997e8e4cc | 91 | if(is_eth_connected) |
gordonlu | 9:999997e8e4cc | 92 | { |
gordonlu | 9:999997e8e4cc | 93 | if(0 == eth.disconnect()) |
gordonlu | 9:999997e8e4cc | 94 | { |
gordonlu | 9:999997e8e4cc | 95 | printf("Disconnect OK\r\n"); |
gordonlu | 9:999997e8e4cc | 96 | } |
gordonlu | 9:999997e8e4cc | 97 | else |
gordonlu | 9:999997e8e4cc | 98 | { |
gordonlu | 9:999997e8e4cc | 99 | printf("Disconnect error\r\n"); |
gordonlu | 9:999997e8e4cc | 100 | } |
gordonlu | 9:999997e8e4cc | 101 | } |
gordonlu | 9:999997e8e4cc | 102 | is_eth_connected = false; |
gordonlu | 8:421c13d323a0 | 103 | Thread::wait(100); |
gordonlu | 8:421c13d323a0 | 104 | } |
gordonlu | 8:421c13d323a0 | 105 | else |
gordonlu | 8:421c13d323a0 | 106 | { |
gordonlu | 8:421c13d323a0 | 107 | printf("Connect OK! IP Address is %s\r\n", eth.getIPAddress()); |
gordonlu | 8:421c13d323a0 | 108 | lcd_mutex.lock(); |
gordonlu | 8:421c13d323a0 | 109 | lcd.locate(0,21); |
gordonlu | 8:421c13d323a0 | 110 | lcd.printf("IP ADDRESS : %s\r\n",eth.getIPAddress()); |
gordonlu | 8:421c13d323a0 | 111 | lcd_mutex.unlock(); |
gordonlu | 9:999997e8e4cc | 112 | is_eth_connected = true; |
gordonlu | 9:999997e8e4cc | 113 | |
gordonlu | 9:999997e8e4cc | 114 | } |
gordonlu | 9:999997e8e4cc | 115 | |
gordonlu | 9:999997e8e4cc | 116 | if(is_eth_connected) |
gordonlu | 9:999997e8e4cc | 117 | { |
gordonlu | 9:999997e8e4cc | 118 | Websocket ws("ws://sockets.mbed.org:443/ws/gordonlu/wo"); |
gordonlu | 9:999997e8e4cc | 119 | int i = 0; |
gordonlu | 9:999997e8e4cc | 120 | while(++i < WS_CONNECT_RETRY) |
gordonlu | 9:999997e8e4cc | 121 | { |
gordonlu | 9:999997e8e4cc | 122 | printf("[%d] WebSwerivce connect to ws://sockets.mbed.org:443/ws/gordonlu/wo \r\n",i); |
gordonlu | 9:999997e8e4cc | 123 | if(ws.connect())break; |
gordonlu | 9:999997e8e4cc | 124 | Thread::wait(1000); |
gordonlu | 9:999997e8e4cc | 125 | } |
gordonlu | 9:999997e8e4cc | 126 | |
gordonlu | 9:999997e8e4cc | 127 | int errCnt = 0; |
gordonlu | 9:999997e8e4cc | 128 | while (ws.is_connected()) |
gordonlu | 9:999997e8e4cc | 129 | { |
gordonlu | 9:999997e8e4cc | 130 | |
gordonlu | 9:999997e8e4cc | 131 | char buf[100]; |
gordonlu | 9:999997e8e4cc | 132 | int scnt = sprintf(buf, "[%u] Hello! Pot1 : %.2f, Pot2 : %.2f, Joystick:%02X\r\n", second, pt1, pt2, js); |
gordonlu | 9:999997e8e4cc | 133 | if((ws.send(buf)) >= scnt) |
gordonlu | 9:999997e8e4cc | 134 | { |
gordonlu | 9:999997e8e4cc | 135 | printf(buf); |
gordonlu | 9:999997e8e4cc | 136 | errCnt = 0; |
gordonlu | 9:999997e8e4cc | 137 | } |
gordonlu | 9:999997e8e4cc | 138 | else |
gordonlu | 9:999997e8e4cc | 139 | { |
gordonlu | 9:999997e8e4cc | 140 | printf("[%d] ws.send failed!!\r\n",++errCnt); |
gordonlu | 9:999997e8e4cc | 141 | } |
gordonlu | 9:999997e8e4cc | 142 | |
gordonlu | 9:999997e8e4cc | 143 | if(errCnt > WS_SEND_RETRY) |
gordonlu | 9:999997e8e4cc | 144 | { |
gordonlu | 9:999997e8e4cc | 145 | printf("close ws and disconnect eth, retry to connect again!\r\n"); |
gordonlu | 9:999997e8e4cc | 146 | ws.close(); |
gordonlu | 9:999997e8e4cc | 147 | break; |
gordonlu | 9:999997e8e4cc | 148 | } |
gordonlu | 9:999997e8e4cc | 149 | |
gordonlu | 9:999997e8e4cc | 150 | Thread::wait(1000); |
gordonlu | 9:999997e8e4cc | 151 | } |
gordonlu | 8:421c13d323a0 | 152 | } |
gordonlu | 9:999997e8e4cc | 153 | } |
gordonlu | 9:999997e8e4cc | 154 | } |
gordonlu | 9:999997e8e4cc | 155 | |
gordonlu | 9:999997e8e4cc | 156 | void secondCounterThread(void const *args) |
gordonlu | 9:999997e8e4cc | 157 | { |
gordonlu | 9:999997e8e4cc | 158 | while(1) |
gordonlu | 9:999997e8e4cc | 159 | { |
gordonlu | 9:999997e8e4cc | 160 | second_mutex.lock(); |
gordonlu | 9:999997e8e4cc | 161 | ++second; |
gordonlu | 9:999997e8e4cc | 162 | second_mutex.unlock(); |
gordonlu | 9:999997e8e4cc | 163 | myled1 != myled1; |
gordonlu | 9:999997e8e4cc | 164 | Thread::wait(1000); |
gordonlu | 8:421c13d323a0 | 165 | } |
gordonlu | 8:421c13d323a0 | 166 | } |
gordonlu | 8:421c13d323a0 | 167 | |
gordonlu | 7:71124ec77f83 | 168 | int main() |
gordonlu | 7:71124ec77f83 | 169 | { |
gordonlu | 8:421c13d323a0 | 170 | |
gordonlu | 7:71124ec77f83 | 171 | lcd.cls(); |
gordonlu | 7:71124ec77f83 | 172 | |
gordonlu | 7:71124ec77f83 | 173 | r.period(0.001); |
gordonlu | 7:71124ec77f83 | 174 | g.period(0.001); |
gordonlu | 7:71124ec77f83 | 175 | b.period(0.001); |
gordonlu | 7:71124ec77f83 | 176 | |
gordonlu | 7:71124ec77f83 | 177 | r = 1; |
gordonlu | 7:71124ec77f83 | 178 | g = 1; |
gordonlu | 7:71124ec77f83 | 179 | b = 1; |
gordonlu | 8:421c13d323a0 | 180 | |
gordonlu | 8:421c13d323a0 | 181 | Thread t1(netThread); |
gordonlu | 9:999997e8e4cc | 182 | Thread t2(potJoystickThread); |
gordonlu | 9:999997e8e4cc | 183 | Thread t3(secondCounterThread); |
gordonlu | 9:999997e8e4cc | 184 | |
gordonlu | 7:71124ec77f83 | 185 | while(true) |
gordonlu | 7:71124ec77f83 | 186 | { |
gordonlu | 8:421c13d323a0 | 187 | lcd_mutex.lock(); |
gordonlu | 7:71124ec77f83 | 188 | lcd.locate(0,1); |
gordonlu | 9:999997e8e4cc | 189 | lcd.printf("Second : %06d ",second); |
gordonlu | 8:421c13d323a0 | 190 | lcd_mutex.unlock(); |
gordonlu | 8:421c13d323a0 | 191 | Thread::wait(1000); |
gordonlu | 7:71124ec77f83 | 192 | } |
gordonlu | 7:71124ec77f83 | 193 | } |