Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832_lcd EthernetInterface WebSocketClient mbed-rtos mbed
rtos_project.cpp@2:b6cd6d969956, 2014-03-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |