mbed application board demo includes lcd, pot, joystick, rgb led, websocket, mbed rtos. websocket demo url is => http://sockets.mbed.org/gordonlu/viewer

Dependencies:   C12832 EthernetInterface WebSocketClient mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
gordonlu
Date:
Thu Feb 12 01:57:25 2015 +0000
Revision:
9:999997e8e4cc
Parent:
8:421c13d323a0
Initial version.

Who changed what in which revision?

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