The code reads various sensors, populates the packet and transmits it over to another TCP Client on receiving a request
Dependencies: Ping WiflyInterface mbed
Fork of Wifly_TCPEchoServer by
main.cpp@2:b15847b47f78, 2013-04-05 (annotated)
- Committer:
- Neel
- Date:
- Fri Apr 05 01:47:23 2013 +0000
- Revision:
- 2:b15847b47f78
- Parent:
- 1:9ae2041887fa
- Child:
- 3:13b54c5c407c
Sensors and actuators are working and have been interfaced with the Android phone;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
samux | 0:0710a5e21ef9 | 1 | #include "mbed.h" |
samux | 0:0710a5e21ef9 | 2 | #include "WiflyInterface.h" |
Neel | 1:9ae2041887fa | 3 | #include "Ping.h" |
samux | 0:0710a5e21ef9 | 4 | |
Neel | 1:9ae2041887fa | 5 | #define ECHO_SERVER_PORT 12345 |
Neel | 1:9ae2041887fa | 6 | #define MY_NODE_ID 1 |
Neel | 1:9ae2041887fa | 7 | |
Neel | 1:9ae2041887fa | 8 | Ping Pinger(p21); |
Neel | 1:9ae2041887fa | 9 | AnalogIn t(p19); //TMP36 is connected here |
Neel | 1:9ae2041887fa | 10 | AnalogIn l(p18); |
Neel | 1:9ae2041887fa | 11 | DigitalIn PIR(p17); |
Neel | 2:b15847b47f78 | 12 | PwmOut dimmer(p22); |
Neel | 2:b15847b47f78 | 13 | PwmOut servo(p24); |
Neel | 2:b15847b47f78 | 14 | DigitalOut led1(LED1); |
Neel | 2:b15847b47f78 | 15 | DigitalOut led2(LED2); |
Neel | 2:b15847b47f78 | 16 | DigitalOut led3(LED3); |
Neel | 2:b15847b47f78 | 17 | DigitalOut myled4(LED4); |
Neel | 2:b15847b47f78 | 18 | DigitalIn cam(p16); |
Neel | 2:b15847b47f78 | 19 | |
Neel | 2:b15847b47f78 | 20 | extern "C" void mbed_reset(); |
samux | 0:0710a5e21ef9 | 21 | |
samux | 0:0710a5e21ef9 | 22 | /* wifly object where: |
samux | 0:0710a5e21ef9 | 23 | * - p9 and p10 are for the serial communication |
samux | 0:0710a5e21ef9 | 24 | * - p25 is for the reset pin |
samux | 0:0710a5e21ef9 | 25 | * - p26 is for the connection status |
samux | 0:0710a5e21ef9 | 26 | * - "mbed" is the ssid of the network |
samux | 0:0710a5e21ef9 | 27 | * - "password" is the password |
samux | 0:0710a5e21ef9 | 28 | * - WPA is the security |
samux | 0:0710a5e21ef9 | 29 | */ |
Neel | 1:9ae2041887fa | 30 | WiflyInterface wifly(p9, p10, p25, p26, "solarskin", "solarskin", WPA); |
samux | 0:0710a5e21ef9 | 31 | |
Neel | 2:b15847b47f78 | 32 | class Watchdog { |
Neel | 2:b15847b47f78 | 33 | public: |
Neel | 2:b15847b47f78 | 34 | // Load timeout value in watchdog timer and enable |
Neel | 2:b15847b47f78 | 35 | void kick(float s) { |
Neel | 2:b15847b47f78 | 36 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
Neel | 2:b15847b47f78 | 37 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
Neel | 2:b15847b47f78 | 38 | LPC_WDT->WDTC = s * (float)clk; |
Neel | 2:b15847b47f78 | 39 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
Neel | 2:b15847b47f78 | 40 | kick(); |
Neel | 2:b15847b47f78 | 41 | } |
Neel | 2:b15847b47f78 | 42 | // "kick" or "feed" the dog - reset the watchdog timer |
Neel | 2:b15847b47f78 | 43 | // by writing this required bit pattern |
Neel | 2:b15847b47f78 | 44 | void kick() { |
Neel | 2:b15847b47f78 | 45 | LPC_WDT->WDFEED = 0xAA; |
Neel | 2:b15847b47f78 | 46 | LPC_WDT->WDFEED = 0x55; |
Neel | 2:b15847b47f78 | 47 | } |
Neel | 2:b15847b47f78 | 48 | }; |
Neel | 2:b15847b47f78 | 49 | |
Neel | 2:b15847b47f78 | 50 | Watchdog wdt; |
Neel | 2:b15847b47f78 | 51 | |
samux | 0:0710a5e21ef9 | 52 | int main (void) |
samux | 0:0710a5e21ef9 | 53 | { |
samux | 0:0710a5e21ef9 | 54 | wifly.init(); // use DHCP |
samux | 0:0710a5e21ef9 | 55 | while (!wifly.connect()); // join the network |
samux | 0:0710a5e21ef9 | 56 | printf("IP Address is %s\n\r", wifly.getIPAddress()); |
Neel | 1:9ae2041887fa | 57 | |
samux | 0:0710a5e21ef9 | 58 | TCPSocketServer server; |
Neel | 2:b15847b47f78 | 59 | server.set_blocking(false, 1500); |
samux | 0:0710a5e21ef9 | 60 | server.bind(ECHO_SERVER_PORT); |
samux | 0:0710a5e21ef9 | 61 | server.listen(); |
Neel | 2:b15847b47f78 | 62 | |
Neel | 2:b15847b47f78 | 63 | |
Neel | 2:b15847b47f78 | 64 | |
samux | 0:0710a5e21ef9 | 65 | printf("\nWait for new connection...\n"); |
samux | 0:0710a5e21ef9 | 66 | TCPSocketConnection client; |
samux | 0:0710a5e21ef9 | 67 | server.accept(client); |
Neel | 2:b15847b47f78 | 68 | client.set_blocking(false,1500); |
Neel | 2:b15847b47f78 | 69 | wdt.kick(10.0); |
Neel | 2:b15847b47f78 | 70 | |
samux | 0:0710a5e21ef9 | 71 | char buffer[256]; |
Neel | 2:b15847b47f78 | 72 | char b='0'; |
Neel | 1:9ae2041887fa | 73 | char data[256]; |
Neel | 1:9ae2041887fa | 74 | float temp_c; |
Neel | 2:b15847b47f78 | 75 | char fan = '0'; |
Neel | 2:b15847b47f78 | 76 | char camera = '0'; |
Neel | 2:b15847b47f78 | 77 | int count=0; |
Neel | 1:9ae2041887fa | 78 | float range; |
Neel | 1:9ae2041887fa | 79 | int packet_no=1; |
Neel | 2:b15847b47f78 | 80 | char motion = '0'; |
Neel | 2:b15847b47f78 | 81 | int n = 9; |
Neel | 1:9ae2041887fa | 82 | |
samux | 0:0710a5e21ef9 | 83 | while (true) { |
Neel | 1:9ae2041887fa | 84 | |
Neel | 1:9ae2041887fa | 85 | |
Neel | 2:b15847b47f78 | 86 | if(!PIR){ |
Neel | 2:b15847b47f78 | 87 | led3 = 1; |
Neel | 2:b15847b47f78 | 88 | motion = '1'; |
Neel | 2:b15847b47f78 | 89 | } |
Neel | 2:b15847b47f78 | 90 | else |
Neel | 2:b15847b47f78 | 91 | { |
Neel | 2:b15847b47f78 | 92 | led3=0; |
Neel | 2:b15847b47f78 | 93 | motion = '0'; |
Neel | 2:b15847b47f78 | 94 | } |
Neel | 2:b15847b47f78 | 95 | if(!cam){camera = '1'; myled4=1;}else{camera='0';myled4=0;} |
Neel | 1:9ae2041887fa | 96 | temp_c=(t.read()*330.0)-50; |
Neel | 1:9ae2041887fa | 97 | printf("\rtemp is%d\n",(int)temp_c); |
Neel | 2:b15847b47f78 | 98 | if(!PIR){ |
Neel | 2:b15847b47f78 | 99 | led3 = 1; |
Neel | 2:b15847b47f78 | 100 | motion = '1'; |
Neel | 2:b15847b47f78 | 101 | } |
Neel | 2:b15847b47f78 | 102 | else |
Neel | 2:b15847b47f78 | 103 | { |
Neel | 2:b15847b47f78 | 104 | led3=0; |
Neel | 2:b15847b47f78 | 105 | motion = '0'; |
Neel | 2:b15847b47f78 | 106 | } |
Neel | 2:b15847b47f78 | 107 | if(!cam){camera = '1'; myled4=1;}else{camera='0';myled4=0;} |
Neel | 1:9ae2041887fa | 108 | float light = l.read_u16(); |
Neel | 1:9ae2041887fa | 109 | printf("\rlight value is %f\n",light); |
Neel | 2:b15847b47f78 | 110 | if(!PIR){ |
Neel | 2:b15847b47f78 | 111 | led3 = 1; |
Neel | 2:b15847b47f78 | 112 | motion = '1'; |
Neel | 2:b15847b47f78 | 113 | } |
Neel | 2:b15847b47f78 | 114 | else |
Neel | 2:b15847b47f78 | 115 | { |
Neel | 2:b15847b47f78 | 116 | led3=0; |
Neel | 2:b15847b47f78 | 117 | motion = '0'; |
Neel | 2:b15847b47f78 | 118 | } |
Neel | 2:b15847b47f78 | 119 | if(!cam){camera = '1'; myled4=1;}else{camera='0';myled4=0;} |
Neel | 1:9ae2041887fa | 120 | Pinger.Send(); |
Neel | 1:9ae2041887fa | 121 | wait_ms(30); |
Neel | 1:9ae2041887fa | 122 | range = Pinger.Read_cm(); |
Neel | 1:9ae2041887fa | 123 | |
Neel | 1:9ae2041887fa | 124 | if(!PIR){ |
Neel | 2:b15847b47f78 | 125 | led3 = 1; |
Neel | 2:b15847b47f78 | 126 | motion = '1'; |
Neel | 2:b15847b47f78 | 127 | } |
Neel | 2:b15847b47f78 | 128 | else |
Neel | 2:b15847b47f78 | 129 | { |
Neel | 2:b15847b47f78 | 130 | led3=0; |
Neel | 2:b15847b47f78 | 131 | motion = '0'; |
Neel | 1:9ae2041887fa | 132 | } |
Neel | 2:b15847b47f78 | 133 | if(!cam){camera = '1'; myled4=1;}else{camera='0';myled4=0;} |
Neel | 2:b15847b47f78 | 134 | if (temp_c >25 || (b==49)) |
Neel | 2:b15847b47f78 | 135 | { |
Neel | 2:b15847b47f78 | 136 | fan = '1'; |
Neel | 2:b15847b47f78 | 137 | led1 = 1; |
Neel | 2:b15847b47f78 | 138 | servo.pulsewidth(0.002); |
Neel | 2:b15847b47f78 | 139 | wait(1); |
Neel | 2:b15847b47f78 | 140 | } |
Neel | 2:b15847b47f78 | 141 | else |
Neel | 2:b15847b47f78 | 142 | { |
Neel | 2:b15847b47f78 | 143 | fan = '0'; |
Neel | 2:b15847b47f78 | 144 | servo.pulsewidth(0); |
Neel | 2:b15847b47f78 | 145 | wait(1); |
Neel | 2:b15847b47f78 | 146 | |
Neel | 2:b15847b47f78 | 147 | } |
Neel | 2:b15847b47f78 | 148 | if(!cam){camera = '1'; myled4=1;}else{camera='0';myled4=0;} |
Neel | 2:b15847b47f78 | 149 | if(light<6000) |
Neel | 1:9ae2041887fa | 150 | { |
Neel | 2:b15847b47f78 | 151 | dimmer = 0.02; |
Neel | 2:b15847b47f78 | 152 | } |
Neel | 2:b15847b47f78 | 153 | else dimmer = 0; |
Neel | 2:b15847b47f78 | 154 | if(!cam){camera = '1'; myled4=1;}else{camera='0';myled4=0;} |
Neel | 2:b15847b47f78 | 155 | n = client.receive(buffer, sizeof(buffer)); |
Neel | 2:b15847b47f78 | 156 | printf("\r N = %d\n",n); |
Neel | 2:b15847b47f78 | 157 | |
Neel | 2:b15847b47f78 | 158 | /*if (n <= 0) count++; |
Neel | 2:b15847b47f78 | 159 | |
Neel | 2:b15847b47f78 | 160 | if (count>10) { mbed_reset(); count=0;} |
Neel | 2:b15847b47f78 | 161 | */ |
Neel | 2:b15847b47f78 | 162 | if (n>1) |
Neel | 2:b15847b47f78 | 163 | { |
Neel | 2:b15847b47f78 | 164 | //for (int i=5;i<n;i++) |
Neel | 2:b15847b47f78 | 165 | printf("5%c 6%c 7%c 8%c 9%c 10%c",buffer[5],buffer[6],buffer[7],buffer[8], buffer[9], buffer[10]); |
Neel | 2:b15847b47f78 | 166 | if (buffer[7] == 49 || buffer[7]==48) b=buffer[7]; |
Neel | 2:b15847b47f78 | 167 | data[3]=(int)motion; |
Neel | 2:b15847b47f78 | 168 | data[5]=MY_NODE_ID; |
Neel | 2:b15847b47f78 | 169 | data[4]=packet_no; |
Neel | 2:b15847b47f78 | 170 | data[0]=(int)temp_c; |
Neel | 2:b15847b47f78 | 171 | data[1]=(int)(light/100); |
Neel | 2:b15847b47f78 | 172 | data[2]=range; |
Neel | 2:b15847b47f78 | 173 | data[6]=(int)fan; |
Neel | 2:b15847b47f78 | 174 | data[7]=(int)camera; |
Neel | 2:b15847b47f78 | 175 | data[8]='\0'; |
Neel | 1:9ae2041887fa | 176 | |
Neel | 1:9ae2041887fa | 177 | n=sprintf(buffer,"%s",data); |
Neel | 1:9ae2041887fa | 178 | printf("\n\n"); |
Neel | 1:9ae2041887fa | 179 | client.send_all(buffer, n); |
Neel | 1:9ae2041887fa | 180 | packet_no++; |
Neel | 2:b15847b47f78 | 181 | |
Neel | 2:b15847b47f78 | 182 | /*if((buffer[6]-48)==1) |
Neel | 2:b15847b47f78 | 183 | { |
Neel | 2:b15847b47f78 | 184 | servo.pulsewidth(0.02); |
Neel | 2:b15847b47f78 | 185 | }else servo.pulsewidth(0); |
Neel | 2:b15847b47f78 | 186 | */ |
Neel | 2:b15847b47f78 | 187 | /*if ((buffer[8]-48)>0) |
Neel | 2:b15847b47f78 | 188 | { |
Neel | 2:b15847b47f78 | 189 | led2=1; |
Neel | 2:b15847b47f78 | 190 | dimmer = ((buffer[8]-48)/100); |
Neel | 2:b15847b47f78 | 191 | }*/ |
Neel | 2:b15847b47f78 | 192 | |
Neel | 2:b15847b47f78 | 193 | //n = client.receive(buffer, sizeof(buffer)); |
Neel | 2:b15847b47f78 | 194 | for (int i=5; i<n; i++) |
Neel | 2:b15847b47f78 | 195 | { |
Neel | 2:b15847b47f78 | 196 | buffer[i]='0'; |
Neel | 2:b15847b47f78 | 197 | } |
Neel | 1:9ae2041887fa | 198 | } |
Neel | 2:b15847b47f78 | 199 | |
Neel | 1:9ae2041887fa | 200 | |
Neel | 2:b15847b47f78 | 201 | |
Neel | 2:b15847b47f78 | 202 | wdt.kick(); |
Neel | 1:9ae2041887fa | 203 | } |
Neel | 1:9ae2041887fa | 204 | client.close(); //Closes the connection with the client |
samux | 0:0710a5e21ef9 | 205 | } |