zzz
Dependencies: C12832_lcd ConfigFile LM75B WiflyInterface2 mbed-rtos mbed
Fork of Xbee_Hello_World_B by
main.cpp@3:623e2b67ebaa, 2016-12-16 (annotated)
- Committer:
- kingkingyyk
- Date:
- Fri Dec 16 02:56:13 2016 +0000
- Revision:
- 3:623e2b67ebaa
- Parent:
- 2:ae1a5862504b
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tristanjph | 0:122702c9168a | 1 | #include "mbed.h" |
kingkingyyk | 1:15d917484a8d | 2 | #include "C12832_lcd.h" |
kingkingyyk | 3:623e2b67ebaa | 3 | #include "LM75B.h" |
kingkingyyk | 1:15d917484a8d | 4 | #include <string> |
kingkingyyk | 3:623e2b67ebaa | 5 | #include "WiflyInterface.h" |
kingkingyyk | 3:623e2b67ebaa | 6 | #include "rtos.h" |
kingkingyyk | 3:623e2b67ebaa | 7 | #include "LM75B.h" |
kingkingyyk | 3:623e2b67ebaa | 8 | |
kingkingyyk | 3:623e2b67ebaa | 9 | class Watchdog { |
kingkingyyk | 3:623e2b67ebaa | 10 | public: |
kingkingyyk | 3:623e2b67ebaa | 11 | // Load timeout value in watchdog timer and enable |
kingkingyyk | 3:623e2b67ebaa | 12 | void kick(float s) { |
kingkingyyk | 3:623e2b67ebaa | 13 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
kingkingyyk | 3:623e2b67ebaa | 14 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
kingkingyyk | 3:623e2b67ebaa | 15 | LPC_WDT->WDTC = s * (float)clk; |
kingkingyyk | 3:623e2b67ebaa | 16 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
kingkingyyk | 3:623e2b67ebaa | 17 | kick(); |
kingkingyyk | 3:623e2b67ebaa | 18 | } |
kingkingyyk | 3:623e2b67ebaa | 19 | // "kick" or "feed" the dog - reset the watchdog timer |
kingkingyyk | 3:623e2b67ebaa | 20 | // by writing this required bit pattern |
kingkingyyk | 3:623e2b67ebaa | 21 | void kick() { |
kingkingyyk | 3:623e2b67ebaa | 22 | LPC_WDT->WDFEED = 0xAA; |
kingkingyyk | 3:623e2b67ebaa | 23 | LPC_WDT->WDFEED = 0x55; |
kingkingyyk | 3:623e2b67ebaa | 24 | } |
kingkingyyk | 3:623e2b67ebaa | 25 | }; |
kingkingyyk | 3:623e2b67ebaa | 26 | |
kingkingyyk | 3:623e2b67ebaa | 27 | // Setup the watchdog timer |
kingkingyyk | 3:623e2b67ebaa | 28 | Watchdog wdt; |
tristanjph | 0:122702c9168a | 29 | |
kingkingyyk | 3:623e2b67ebaa | 30 | WiflyInterface wifly(p9, p10, p30, p29, "SSID", "PASSWORD", WPA); |
kingkingyyk | 3:623e2b67ebaa | 31 | AnalogIn ain(p17); |
kingkingyyk | 1:15d917484a8d | 32 | C12832_LCD lcd; |
kingkingyyk | 3:623e2b67ebaa | 33 | DigitalOut led [] ={(LED1),(LED2),(LED3),(LED4)}; |
kingkingyyk | 3:623e2b67ebaa | 34 | LM75B tempSensor(p28,p27); |
kingkingyyk | 3:623e2b67ebaa | 35 | const char *server_ip="192.168.10.2"; |
kingkingyyk | 3:623e2b67ebaa | 36 | const int server_port=40000; |
kingkingyyk | 3:623e2b67ebaa | 37 | char status_data[100]; |
kingkingyyk | 3:623e2b67ebaa | 38 | |
kingkingyyk | 3:623e2b67ebaa | 39 | const char* tempFormat="0;TechRoomB_Monitor;BlockB_Temperature;%f"; |
kingkingyyk | 3:623e2b67ebaa | 40 | void sendTempReading () { |
kingkingyyk | 3:623e2b67ebaa | 41 | led[2]=1; |
kingkingyyk | 3:623e2b67ebaa | 42 | TCPSocketConnection conn; |
kingkingyyk | 3:623e2b67ebaa | 43 | |
kingkingyyk | 3:623e2b67ebaa | 44 | for (int i=0;i<100;i++) status_data[i]=0; |
kingkingyyk | 3:623e2b67ebaa | 45 | snprintf(status_data,100,tempFormat,(((float)tempSensor)+55)/175); |
kingkingyyk | 1:15d917484a8d | 46 | |
kingkingyyk | 3:623e2b67ebaa | 47 | led[3]=1; |
kingkingyyk | 3:623e2b67ebaa | 48 | if (conn.connect(server_ip,server_port)==0 && conn.send_all(status_data,100)>=0); wdt.kick(); |
kingkingyyk | 3:623e2b67ebaa | 49 | led[3]=0; |
kingkingyyk | 3:623e2b67ebaa | 50 | |
kingkingyyk | 3:623e2b67ebaa | 51 | wait(0.1); |
kingkingyyk | 3:623e2b67ebaa | 52 | conn.close(); |
kingkingyyk | 3:623e2b67ebaa | 53 | led[2]=0; |
kingkingyyk | 3:623e2b67ebaa | 54 | } |
kingkingyyk | 3:623e2b67ebaa | 55 | |
kingkingyyk | 3:623e2b67ebaa | 56 | const char* currentFormat="0;TechRoomB_Monitor;BlockB_AirCondCurrent;%f"; |
kingkingyyk | 3:623e2b67ebaa | 57 | void sendCurrentReading () { |
kingkingyyk | 3:623e2b67ebaa | 58 | led[0]=1; |
kingkingyyk | 3:623e2b67ebaa | 59 | TCPSocketConnection conn; |
kingkingyyk | 3:623e2b67ebaa | 60 | |
kingkingyyk | 3:623e2b67ebaa | 61 | float max=0.0; |
kingkingyyk | 3:623e2b67ebaa | 62 | time_t start=time(NULL); |
kingkingyyk | 3:623e2b67ebaa | 63 | while (time(NULL)-start<2) { |
kingkingyyk | 3:623e2b67ebaa | 64 | if (ain>0 && ain<0.3 && ain>max) max=ain; |
kingkingyyk | 3:623e2b67ebaa | 65 | } |
kingkingyyk | 3:623e2b67ebaa | 66 | |
kingkingyyk | 1:15d917484a8d | 67 | lcd.cls(); |
kingkingyyk | 1:15d917484a8d | 68 | lcd.locate(0,0); |
kingkingyyk | 3:623e2b67ebaa | 69 | lcd.printf("Current : %f",max); |
kingkingyyk | 3:623e2b67ebaa | 70 | |
kingkingyyk | 3:623e2b67ebaa | 71 | for (int i=0;i<100;i++) status_data[i]=0; |
kingkingyyk | 3:623e2b67ebaa | 72 | snprintf(status_data,100,currentFormat,max*3); |
kingkingyyk | 3:623e2b67ebaa | 73 | |
kingkingyyk | 3:623e2b67ebaa | 74 | led[1]=1; |
kingkingyyk | 3:623e2b67ebaa | 75 | if (conn.connect(server_ip,server_port)==0 && conn.send_all(status_data,100)>=0); wdt.kick(); |
kingkingyyk | 3:623e2b67ebaa | 76 | led[1]=0; |
kingkingyyk | 1:15d917484a8d | 77 | |
kingkingyyk | 3:623e2b67ebaa | 78 | wait(0.1); |
kingkingyyk | 3:623e2b67ebaa | 79 | conn.close(); |
kingkingyyk | 3:623e2b67ebaa | 80 | led[0]=0; |
kingkingyyk | 3:623e2b67ebaa | 81 | } |
kingkingyyk | 3:623e2b67ebaa | 82 | |
kingkingyyk | 3:623e2b67ebaa | 83 | void sendReading() { |
kingkingyyk | 3:623e2b67ebaa | 84 | sendCurrentReading(); |
kingkingyyk | 3:623e2b67ebaa | 85 | wait(3.0); |
kingkingyyk | 3:623e2b67ebaa | 86 | sendTempReading(); |
kingkingyyk | 3:623e2b67ebaa | 87 | } |
kingkingyyk | 3:623e2b67ebaa | 88 | |
kingkingyyk | 3:623e2b67ebaa | 89 | void setupWifly() { |
kingkingyyk | 3:623e2b67ebaa | 90 | lcd.cls(); |
kingkingyyk | 3:623e2b67ebaa | 91 | lcd.locate(0,0); |
kingkingyyk | 3:623e2b67ebaa | 92 | lcd.printf("Start WiFi Setup\n"); |
kingkingyyk | 3:623e2b67ebaa | 93 | |
kingkingyyk | 3:623e2b67ebaa | 94 | wifly.init(); |
kingkingyyk | 3:623e2b67ebaa | 95 | } |
kingkingyyk | 3:623e2b67ebaa | 96 | |
kingkingyyk | 3:623e2b67ebaa | 97 | void checkWiflyConnection() { |
kingkingyyk | 3:623e2b67ebaa | 98 | if (!wifly.is_associated()) { |
kingkingyyk | 3:623e2b67ebaa | 99 | lcd.cls(); |
kingkingyyk | 3:623e2b67ebaa | 100 | lcd.locate(0,0); |
kingkingyyk | 3:623e2b67ebaa | 101 | lcd.printf("Reconnecting..."); |
kingkingyyk | 3:623e2b67ebaa | 102 | while (!wifly.connect()); |
kingkingyyk | 3:623e2b67ebaa | 103 | lcd.cls(); |
kingkingyyk | 3:623e2b67ebaa | 104 | lcd.locate(0,0); |
kingkingyyk | 3:623e2b67ebaa | 105 | lcd.printf("IP Address : %s\n", wifly.getIPAddress()); |
kingkingyyk | 1:15d917484a8d | 106 | } |
kingkingyyk | 1:15d917484a8d | 107 | } |
kingkingyyk | 1:15d917484a8d | 108 | |
kingkingyyk | 3:623e2b67ebaa | 109 | void getCommand() { |
kingkingyyk | 3:623e2b67ebaa | 110 | checkWiflyConnection(); |
kingkingyyk | 3:623e2b67ebaa | 111 | wdt.kick(120.0); |
kingkingyyk | 3:623e2b67ebaa | 112 | while (1) { |
kingkingyyk | 3:623e2b67ebaa | 113 | sendReading(); |
kingkingyyk | 3:623e2b67ebaa | 114 | wait(60.0); |
kingkingyyk | 3:623e2b67ebaa | 115 | } |
kingkingyyk | 1:15d917484a8d | 116 | } |
tristanjph | 0:122702c9168a | 117 | |
kingkingyyk | 1:15d917484a8d | 118 | int main() { |
kingkingyyk | 3:623e2b67ebaa | 119 | set_time(0); |
kingkingyyk | 3:623e2b67ebaa | 120 | mbed_interface_disconnect(); //Disable debugging to improve ADC precision. | Comment this if you need debugging via serial. |
tristanjph | 0:122702c9168a | 121 | |
kingkingyyk | 3:623e2b67ebaa | 122 | setupWifly(); |
kingkingyyk | 3:623e2b67ebaa | 123 | |
kingkingyyk | 3:623e2b67ebaa | 124 | getCommand(); |
tristanjph | 0:122702c9168a | 125 | } |