Joe Roop / Mbed 2 deprecated rtos_project

Dependencies:   C12832_lcd EthernetInterface WebSocketClient mbed-rtos mbed

Committer:
joeroop
Date:
Sun Mar 23 17:59:55 2014 +0000
Revision:
2:b6cd6d969956
Parent:
1:dac74cbb552e
Child:
3:2e437ac484c5
works with EthernetInterface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joeroop 0:dba71a0b1714 1
joeroop 0:dba71a0b1714 2 #ifndef WIFI
joeroop 0:dba71a0b1714 3 //#define WIFI
joeroop 0:dba71a0b1714 4 #endif
joeroop 0:dba71a0b1714 5
joeroop 2:b6cd6d969956 6 #include "mbed.h"
joeroop 2:b6cd6d969956 7 #include "rtos.h"
joeroop 2:b6cd6d969956 8
joeroop 2:b6cd6d969956 9 #ifdef WIFI
joeroop 2:b6cd6d969956 10 #include "WiflyInterface.h"
joeroop 2:b6cd6d969956 11 WiflyInterface eth(p9, p10, p30, p29, "Castleton", "Gratitude279!", WPA); //
joeroop 2:b6cd6d969956 12 #else
joeroop 2:b6cd6d969956 13 #include "EthernetInterface.h"
joeroop 2:b6cd6d969956 14 EthernetInterface eth;
joeroop 2:b6cd6d969956 15 #endif
joeroop 2:b6cd6d969956 16
joeroop 2:b6cd6d969956 17 #include "Websocket.h"
joeroop 2:b6cd6d969956 18 #include "C12832_lcd.h"
joeroop 2:b6cd6d969956 19
joeroop 0:dba71a0b1714 20 /* internet interface:
joeroop 0:dba71a0b1714 21 * - p9 and p10 are for the serial communication
joeroop 0:dba71a0b1714 22 * - p30 is for the reset pin
joeroop 0:dba71a0b1714 23 * - p29 is for the connection status
joeroop 0:dba71a0b1714 24 * - "mbed" is the ssid of the network
joeroop 0:dba71a0b1714 25 * - "password" is the password
joeroop 0:dba71a0b1714 26 * - WPA is the security
joeroop 0:dba71a0b1714 27 */
joeroop 0:dba71a0b1714 28
joeroop 1:dac74cbb552e 29 DigitalOut led1(LED1);
joeroop 1:dac74cbb552e 30
joeroop 1:dac74cbb552e 31 typedef enum {CONNECT = 1, DISCONNECT} state_t;
joeroop 1:dac74cbb552e 32 //Threads
joeroop 1:dac74cbb552e 33 void thread_eth(void const *args);
joeroop 1:dac74cbb552e 34 void thread_ws(void const *args);
joeroop 1:dac74cbb552e 35 void thread_send(void const *args);
joeroop 1:dac74cbb552e 36
joeroop 1:dac74cbb552e 37 Thread *proxy_eth;
joeroop 1:dac74cbb552e 38 Thread *proxy_ws;
joeroop 1:dac74cbb552e 39 Thread *proxy_send;
joeroop 1:dac74cbb552e 40
joeroop 1:dac74cbb552e 41 //ISRs
joeroop 1:dac74cbb552e 42 InterruptIn irptReset(p13); //up on joystick
joeroop 1:dac74cbb552e 43 void isrReset(void);
joeroop 1:dac74cbb552e 44
joeroop 1:dac74cbb552e 45
joeroop 0:dba71a0b1714 46 Websocket ws("ws://embedded.duckdns.org:8080/");
joeroop 0:dba71a0b1714 47
joeroop 0:dba71a0b1714 48
joeroop 0:dba71a0b1714 49 //lcd
joeroop 0:dba71a0b1714 50 C12832_LCD lcd;
joeroop 0:dba71a0b1714 51 AnalogIn sonar(p17); //hook up gnd, 3.3 red, p17 yellow
joeroop 0:dba71a0b1714 52
joeroop 0:dba71a0b1714 53 void prnt(char msg[40],bool clear,int line);
joeroop 0:dba71a0b1714 54 void connect(void);
joeroop 0:dba71a0b1714 55 int cnt;
joeroop 0:dba71a0b1714 56
joeroop 0:dba71a0b1714 57 int main()
joeroop 0:dba71a0b1714 58 {
joeroop 1:dac74cbb552e 59 irptReset.rise(&isrReset);
joeroop 0:dba71a0b1714 60
joeroop 1:dac74cbb552e 61 Thread t1(thread_eth);
joeroop 1:dac74cbb552e 62 Thread t2(thread_ws);
joeroop 1:dac74cbb552e 63 Thread t3(thread_send);
joeroop 0:dba71a0b1714 64
joeroop 1:dac74cbb552e 65 proxy_eth = &t1;
joeroop 1:dac74cbb552e 66 proxy_ws = &t2;
joeroop 1:dac74cbb552e 67 proxy_send = &t3;
joeroop 1:dac74cbb552e 68
joeroop 1:dac74cbb552e 69 proxy_eth->signal_set(CONNECT); //start the system
joeroop 1:dac74cbb552e 70 while(1){
joeroop 1:dac74cbb552e 71 Thread::wait(1000);
joeroop 0:dba71a0b1714 72 }
joeroop 0:dba71a0b1714 73 }
joeroop 0:dba71a0b1714 74
joeroop 1:dac74cbb552e 75 void isrReset(void){
joeroop 1:dac74cbb552e 76 proxy_eth->signal_set(CONNECT);
joeroop 0:dba71a0b1714 77 }
joeroop 0:dba71a0b1714 78
joeroop 1:dac74cbb552e 79 //Threads
joeroop 1:dac74cbb552e 80 //keep track of ethernet connection
joeroop 1:dac74cbb552e 81 void thread_eth(void const *args){
joeroop 1:dac74cbb552e 82 osEvent evt;
joeroop 1:dac74cbb552e 83 int32_t sig, cnt, ret;
joeroop 1:dac74cbb552e 84 eth.init();
joeroop 1:dac74cbb552e 85 while(1){
joeroop 1:dac74cbb552e 86 evt = Thread::signal_wait(0); //will time out then loop not needed
joeroop 1:dac74cbb552e 87 sig = evt.value.signals;
joeroop 1:dac74cbb552e 88 switch(sig){
joeroop 1:dac74cbb552e 89 case CONNECT:
joeroop 1:dac74cbb552e 90 led1 = !led1;
joeroop 1:dac74cbb552e 91 cnt = 0; //make a saw tooth
joeroop 1:dac74cbb552e 92 while((ret = eth.connect()) != 0){
joeroop 1:dac74cbb552e 93 lcd.locate(0,0);
joeroop 1:dac74cbb552e 94 lcd.printf("eth try...%d",++cnt);
joeroop 1:dac74cbb552e 95 cnt = cnt > 1000 ? 0 : cnt; //limit the cnt
joeroop 1:dac74cbb552e 96 Thread::wait(250);
joeroop 1:dac74cbb552e 97 } //loop forever trying to connect
joeroop 1:dac74cbb552e 98 proxy_ws->signal_set(CONNECT);
joeroop 1:dac74cbb552e 99 break;
joeroop 1:dac74cbb552e 100 }
joeroop 0:dba71a0b1714 101 }
joeroop 1:dac74cbb552e 102 }
joeroop 1:dac74cbb552e 103 //keep track of ws connection
joeroop 1:dac74cbb552e 104 void thread_ws(void const *args){
joeroop 1:dac74cbb552e 105 osEvent evt;
joeroop 1:dac74cbb552e 106 int32_t sig, ret, cnt;
joeroop 1:dac74cbb552e 107 while(1){
joeroop 1:dac74cbb552e 108 evt = Thread::signal_wait(0); //will time out then loop not needed
joeroop 1:dac74cbb552e 109 sig = evt.value.signals;
joeroop 1:dac74cbb552e 110 switch(sig){
joeroop 1:dac74cbb552e 111 case CONNECT:
joeroop 1:dac74cbb552e 112 cnt = 50;
joeroop 1:dac74cbb552e 113 ws.close(); //close the connection because send was not working
joeroop 1:dac74cbb552e 114 while((ret = ws.connect()) != 0 && cnt-- > 0){
joeroop 1:dac74cbb552e 115 lcd.locate(0,10);
joeroop 1:dac74cbb552e 116 lcd.printf("ws try connect...%d",cnt);
joeroop 1:dac74cbb552e 117 Thread::wait(250);
joeroop 1:dac74cbb552e 118 } //loop x times trying to connect
joeroop 1:dac74cbb552e 119 if(ret != 0) proxy_eth->signal_set(CONNECT); //couldn't connect
joeroop 1:dac74cbb552e 120 else proxy_send->signal_set(CONNECT); //got a ws connection
joeroop 1:dac74cbb552e 121 break;
joeroop 1:dac74cbb552e 122 }
joeroop 0:dba71a0b1714 123 }
joeroop 1:dac74cbb552e 124
joeroop 1:dac74cbb552e 125 }
joeroop 1:dac74cbb552e 126 //send data at intervals
joeroop 1:dac74cbb552e 127 void thread_send(void const *args){
joeroop 1:dac74cbb552e 128 osEvent evt;
joeroop 1:dac74cbb552e 129 int32_t sig, ret, cnt;
joeroop 1:dac74cbb552e 130 char msg[100];
joeroop 1:dac74cbb552e 131 float range;
joeroop 1:dac74cbb552e 132 while(1){
joeroop 1:dac74cbb552e 133 evt = Thread::signal_wait(0); //will time out then loop not needed
joeroop 1:dac74cbb552e 134 sig = evt.value.signals;
joeroop 1:dac74cbb552e 135 switch(sig){
joeroop 1:dac74cbb552e 136 case CONNECT:
joeroop 1:dac74cbb552e 137 cnt = 0; //make this a saw tooth
joeroop 1:dac74cbb552e 138 do{
joeroop 1:dac74cbb552e 139 range = sonar*3.3/0.0032*0.0328084;
joeroop 1:dac74cbb552e 140 sprintf(msg, "{\"msg\":\"sonar\",\"range\":%3.2f}", range);
joeroop 1:dac74cbb552e 141 ret = ws.send(msg);
joeroop 1:dac74cbb552e 142 lcd.locate(0,20);
joeroop 1:dac74cbb552e 143 lcd.printf("%d range: %-3.2f ft %d ",ret, range, ws.is_connected());
joeroop 1:dac74cbb552e 144 Thread::wait(250);
joeroop 1:dac74cbb552e 145 }while(ret != -1);
joeroop 1:dac74cbb552e 146 proxy_ws->signal_set(CONNECT); //lost connection to ws so try ws
joeroop 1:dac74cbb552e 147 break;
joeroop 1:dac74cbb552e 148 }
joeroop 1:dac74cbb552e 149 }
joeroop 0:dba71a0b1714 150 }