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 Samuel Mokrani

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?

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