Code written by Paul Rabbat, Angel Daruna, Jarel Hawkins, and Cordel Williams

Dependencies:   4DGL-uLCD-SE EthernetInterface HTTPClient NTPClient PinDetect SDFileSystem mbed-rpc mbed-rtos mbed wave_player

Fork of ECE4180_FinalProject by Angel Daruna

Committer:
prabbat3
Date:
Tue Dec 02 14:18:16 2014 +0000
Revision:
7:b0f2169bdf48
Parent:
6:24d42cae48ad
Child:
8:548f413118e9
Working as of 12/1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prabbat3 0:0a99e3fc2a46 1 // Includes
prabbat3 0:0a99e3fc2a46 2 #include "mbed.h"
prabbat3 0:0a99e3fc2a46 3 #include "NTPClient.h"
prabbat3 0:0a99e3fc2a46 4 #include "uLCD_4DGL.h"
prabbat3 0:0a99e3fc2a46 5 #include "EthernetInterface.h"
prabbat3 0:0a99e3fc2a46 6 #include <string>
prabbat3 0:0a99e3fc2a46 7 #include "mbed_rpc.h"
prabbat3 0:0a99e3fc2a46 8 #include "RPCCommand.h"
prabbat3 0:0a99e3fc2a46 9 #include "HTTPServer.h"
prabbat3 0:0a99e3fc2a46 10 #include "Formatter.h"
prabbat3 0:0a99e3fc2a46 11 #include "RequestHandler.h"
prabbat3 0:0a99e3fc2a46 12 #include "RPCType.h"
prabbat3 0:0a99e3fc2a46 13 #include "alarmContainer.h"
prabbat3 0:0a99e3fc2a46 14
prabbat3 0:0a99e3fc2a46 15 // Defines
prabbat3 0:0a99e3fc2a46 16 #define SERVER_PORT 80 //HTTPSERVER
prabbat3 0:0a99e3fc2a46 17
prabbat3 0:0a99e3fc2a46 18 // Global variables
prabbat3 0:0a99e3fc2a46 19 EthernetInterface eth;
prabbat3 0:0a99e3fc2a46 20 uLCD_4DGL uLCD(p28, p27, p29); // serial tx, serial rx, reset pin;
prabbat3 0:0a99e3fc2a46 21 alarmModel _alarm;
prabbat3 0:0a99e3fc2a46 22 string dayOfWeek, month, dayNum, ampm;
prabbat3 0:0a99e3fc2a46 23 int hour, minute, sec;
prabbat3 4:bb1bb1fc0cf5 24 PwmOut led1(LED1); // led 1 indicates dim value
prabbat3 1:d7f65be2640d 25 DigitalOut led2(LED2); // led 2 indicates delay time for interrupts
prabbat3 1:d7f65be2640d 26 DigitalOut led3(LED3); // Indicates the alarm has been set
prabbat3 1:d7f65be2640d 27 DigitalOut led4(LED4); // Indiciates the alarm is going off
prabbat3 1:d7f65be2640d 28 int alarmSignaled = 0;
prabbat3 1:d7f65be2640d 29
prabbat3 1:d7f65be2640d 30 // pin for ZeroCross tail input
prabbat3 1:d7f65be2640d 31 // An external 1K pullup required
prabbat3 1:d7f65be2640d 32 InterruptIn zerocross(p22);
prabbat3 1:d7f65be2640d 33
prabbat3 1:d7f65be2640d 34 // pin for PowerSSRtail output
prabbat3 1:d7f65be2640d 35 DigitalOut SSR(p21);
prabbat3 1:d7f65be2640d 36
prabbat3 1:d7f65be2640d 37 //use timer interrupts to control dimming
prabbat3 1:d7f65be2640d 38 Timeout SSRtriggerOn;
prabbat3 1:d7f65be2640d 39
prabbat3 1:d7f65be2640d 40 // dimmer value 0.0=off and 1.0=full on
prabbat3 1:d7f65be2640d 41 volatile float dim;
prabbat3 1:d7f65be2640d 42
prabbat3 1:d7f65be2640d 43 // AC power line frequency
prabbat3 1:d7f65be2640d 44 const float powerlinefrequency=60.000;
prabbat3 1:d7f65be2640d 45
prabbat3 0:0a99e3fc2a46 46
prabbat3 0:0a99e3fc2a46 47 // Function prototypes
prabbat3 0:0a99e3fc2a46 48 HTTPServer create_simple_server();
prabbat3 0:0a99e3fc2a46 49 HTTPServer create_interactive_server();
prabbat3 4:bb1bb1fc0cf5 50
prabbat3 0:0a99e3fc2a46 51 void thread_server(void const *args);
prabbat3 0:0a99e3fc2a46 52 void thread_display(void const *args);
prabbat3 0:0a99e3fc2a46 53 void thread_alarm(void const *args);
prabbat3 1:d7f65be2640d 54 void triggerOn();
prabbat3 1:d7f65be2640d 55 void dimmer();
prabbat3 1:d7f65be2640d 56 void turn_on();
prabbat3 0:0a99e3fc2a46 57
prabbat3 4:bb1bb1fc0cf5 58 /** Weather **/
prabbat3 4:bb1bb1fc0cf5 59 #include "HTTPClient.h"
prabbat3 4:bb1bb1fc0cf5 60 #include "spdomparser.hpp"
prabbat3 4:bb1bb1fc0cf5 61 #include "spxmlnode.hpp"
prabbat3 4:bb1bb1fc0cf5 62 #include "spxmlhandle.hpp"
prabbat3 4:bb1bb1fc0cf5 63 void getWeather();
prabbat3 4:bb1bb1fc0cf5 64 void getTime();
prabbat3 5:be2cfaa8f4a2 65 void parseResults();
prabbat3 5:be2cfaa8f4a2 66 char buf[3000];
prabbat3 7:b0f2169bdf48 67 string weatherCondition = "";
prabbat3 7:b0f2169bdf48 68 string lowTemperature = "";
prabbat3 7:b0f2169bdf48 69 string highTemperature = "";
prabbat3 4:bb1bb1fc0cf5 70
prabbat3 0:0a99e3fc2a46 71 int main() {
prabbat3 1:d7f65be2640d 72 dim = -1.0;
prabbat3 0:0a99e3fc2a46 73 printf("Getting IP Address.. ");
prabbat3 0:0a99e3fc2a46 74 uLCD.baudrate(2000000);
prabbat3 0:0a99e3fc2a46 75 uLCD.cls();
prabbat3 0:0a99e3fc2a46 76 uLCD.background_color(BLACK);
prabbat3 0:0a99e3fc2a46 77 uLCD.textbackground_color(BLACK);
prabbat3 0:0a99e3fc2a46 78 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 79 uLCD.color(BLUE);
prabbat3 0:0a99e3fc2a46 80 uLCD.text_height(2);
prabbat3 0:0a99e3fc2a46 81 uLCD.text_width(2);
prabbat3 0:0a99e3fc2a46 82 uLCD.printf("\n\nUniv Time\n Clock\n");
prabbat3 0:0a99e3fc2a46 83 uLCD.text_height(1);
prabbat3 0:0a99e3fc2a46 84 uLCD.text_width(1);
prabbat3 0:0a99e3fc2a46 85 uLCD.printf(" Loading...\n");
prabbat3 0:0a99e3fc2a46 86 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 87
prabbat3 0:0a99e3fc2a46 88 if(eth.init())
prabbat3 0:0a99e3fc2a46 89 {
prabbat3 0:0a99e3fc2a46 90 printf("Error while initializing the ethernet interface.\n");
prabbat3 0:0a99e3fc2a46 91 return -1;
prabbat3 0:0a99e3fc2a46 92 }
prabbat3 0:0a99e3fc2a46 93 wait(5);
prabbat3 0:0a99e3fc2a46 94 if(eth.connect())
prabbat3 0:0a99e3fc2a46 95 {
prabbat3 0:0a99e3fc2a46 96 printf("Error while starting the ethernet interface.\n");
prabbat3 0:0a99e3fc2a46 97 return -1;
prabbat3 0:0a99e3fc2a46 98 }
prabbat3 0:0a99e3fc2a46 99
prabbat3 0:0a99e3fc2a46 100 printf("IP Address is %s\n", eth.getIPAddress());
prabbat3 0:0a99e3fc2a46 101
prabbat3 4:bb1bb1fc0cf5 102 getWeather();
prabbat3 4:bb1bb1fc0cf5 103 wait(1);
prabbat3 5:be2cfaa8f4a2 104 parseResults();
prabbat3 5:be2cfaa8f4a2 105 wait(1);
prabbat3 4:bb1bb1fc0cf5 106 getTime();
prabbat3 4:bb1bb1fc0cf5 107 wait(1);
prabbat3 1:d7f65be2640d 108
prabbat3 1:d7f65be2640d 109 //set up interrupt routine to detect AC line zero crossings
prabbat3 1:d7f65be2640d 110 zerocross.mode(PullNone);
prabbat3 1:d7f65be2640d 111 wait(.2);
prabbat3 1:d7f65be2640d 112 zerocross.rise(&dimmer);
prabbat3 1:d7f65be2640d 113 // main program only sets dimmer level (dim)
prabbat3 1:d7f65be2640d 114 // interrupt routines dim the light
prabbat3 0:0a99e3fc2a46 115
prabbat3 7:b0f2169bdf48 116 Thread t1(thread_server); //start thread_server
prabbat3 0:0a99e3fc2a46 117 Thread t2(thread_display);
prabbat3 0:0a99e3fc2a46 118 Thread t3(thread_alarm);
prabbat3 0:0a99e3fc2a46 119
prabbat3 4:bb1bb1fc0cf5 120 while(1){
prabbat3 4:bb1bb1fc0cf5 121 led1=!led1;
prabbat3 4:bb1bb1fc0cf5 122 Thread::wait(1000);
prabbat3 4:bb1bb1fc0cf5 123 }
prabbat3 4:bb1bb1fc0cf5 124 }
prabbat3 4:bb1bb1fc0cf5 125
prabbat3 4:bb1bb1fc0cf5 126 void getWeather(){
prabbat3 4:bb1bb1fc0cf5 127 /*** WEATHER****/
prabbat3 4:bb1bb1fc0cf5 128 printf("Getting weather..\n");
prabbat3 4:bb1bb1fc0cf5 129 HTTPClient http;
prabbat3 6:24d42cae48ad 130 int retHttp = http.get("http://weather.yahooapis.com/forecastrss?w=2357024&u=f", buf, sizeof(buf));
prabbat3 4:bb1bb1fc0cf5 131
prabbat3 4:bb1bb1fc0cf5 132 switch(retHttp){
prabbat3 4:bb1bb1fc0cf5 133 case HTTP_OK:
prabbat3 4:bb1bb1fc0cf5 134 printf("Read completely\n");
prabbat3 4:bb1bb1fc0cf5 135 break;
prabbat3 4:bb1bb1fc0cf5 136 case HTTP_TIMEOUT:
prabbat3 4:bb1bb1fc0cf5 137 printf("Connection Timeout\n");
prabbat3 4:bb1bb1fc0cf5 138 break;
prabbat3 4:bb1bb1fc0cf5 139 case HTTP_CONN:
prabbat3 4:bb1bb1fc0cf5 140 printf("Connection Error\n");
prabbat3 4:bb1bb1fc0cf5 141 break;
prabbat3 4:bb1bb1fc0cf5 142 default:
prabbat3 4:bb1bb1fc0cf5 143 printf("Error\n");
prabbat3 4:bb1bb1fc0cf5 144 }
prabbat3 5:be2cfaa8f4a2 145 }
prabbat3 4:bb1bb1fc0cf5 146
prabbat3 5:be2cfaa8f4a2 147 void parseResults(){
prabbat3 5:be2cfaa8f4a2 148 printf("Starting parser\n");
prabbat3 5:be2cfaa8f4a2 149 SP_XmlDomParser parser;
prabbat3 7:b0f2169bdf48 150 int i=0;
prabbat3 7:b0f2169bdf48 151 //printf("\n----------%s----------\n",buf);
prabbat3 7:b0f2169bdf48 152 char* chars_array = strtok(buf, "\"");
prabbat3 7:b0f2169bdf48 153 while(chars_array)
prabbat3 7:b0f2169bdf48 154 {
prabbat3 7:b0f2169bdf48 155 //printf("%d: %s\n", i, chars_array);
prabbat3 7:b0f2169bdf48 156
prabbat3 7:b0f2169bdf48 157 if(i==63){
prabbat3 7:b0f2169bdf48 158 lowTemperature = chars_array;
prabbat3 7:b0f2169bdf48 159 printf("Low temp: %s F\n", lowTemperature);
prabbat3 7:b0f2169bdf48 160 }
prabbat3 7:b0f2169bdf48 161 else if(i==65){
prabbat3 7:b0f2169bdf48 162 highTemperature = chars_array;
prabbat3 7:b0f2169bdf48 163 printf("Low temp: %s F\n", highTemperature);
prabbat3 7:b0f2169bdf48 164 }
prabbat3 7:b0f2169bdf48 165 else if (i==67){
prabbat3 7:b0f2169bdf48 166 weatherCondition = chars_array;
prabbat3 7:b0f2169bdf48 167 printf("Weather: %s\n", weatherCondition);
prabbat3 7:b0f2169bdf48 168 }
prabbat3 7:b0f2169bdf48 169
prabbat3 7:b0f2169bdf48 170 i++;
prabbat3 7:b0f2169bdf48 171 chars_array = strtok(NULL, "\"");
prabbat3 7:b0f2169bdf48 172 }
prabbat3 5:be2cfaa8f4a2 173
prabbat3 4:bb1bb1fc0cf5 174
prabbat3 7:b0f2169bdf48 175 /*parser.append( buf, strlen(buf)); // stream current buffer data to the XML parser
prabbat3 4:bb1bb1fc0cf5 176 printf("Parser appended\n");
prabbat3 4:bb1bb1fc0cf5 177
prabbat3 7:b0f2169bdf48 178
prabbat3 4:bb1bb1fc0cf5 179 SP_XmlHandle rootHandle( parser.getDocument()->getRootElement() );
prabbat3 4:bb1bb1fc0cf5 180
prabbat3 4:bb1bb1fc0cf5 181 SP_XmlElementNode * location = rootHandle.getChild( "channel" ).getChild( "yweather:location" ).toElement();
prabbat3 4:bb1bb1fc0cf5 182 if (location) {
prabbat3 4:bb1bb1fc0cf5 183 printf("\r\n === Location:%s === \r\n",location->getAttrValue("city"));
prabbat3 4:bb1bb1fc0cf5 184 }
prabbat3 4:bb1bb1fc0cf5 185
prabbat3 4:bb1bb1fc0cf5 186 SP_XmlElementNode * forecast;
prabbat3 4:bb1bb1fc0cf5 187
prabbat3 4:bb1bb1fc0cf5 188 forecast = rootHandle.getChild( "channel" ).getChild("item").getChild( "yweather:forecast",0).toElement();
prabbat3 4:bb1bb1fc0cf5 189 if (forecast) {
prabbat3 4:bb1bb1fc0cf5 190 printf("\r\n ----- Date:%s(%s) ----- \r\n",forecast->getAttrValue("date"),forecast->getAttrValue("day"));
prabbat3 4:bb1bb1fc0cf5 191 printf("Condition:%s \n",forecast->getAttrValue("text"));
prabbat3 6:24d42cae48ad 192 printf("Temp:Low%sF High%sF\n",forecast->getAttrValue("low"),forecast->getAttrValue("high"));
prabbat3 4:bb1bb1fc0cf5 193 }
prabbat3 4:bb1bb1fc0cf5 194
prabbat3 4:bb1bb1fc0cf5 195 forecast = rootHandle.getChild( "channel" ).getChild("item").getChild( "yweather:forecast",1).toElement();
prabbat3 4:bb1bb1fc0cf5 196 if (forecast) {
prabbat3 4:bb1bb1fc0cf5 197 printf("\r\n ----- Date:%s(%s) ----- \r\n",forecast->getAttrValue("date"),forecast->getAttrValue("day"));
prabbat3 4:bb1bb1fc0cf5 198 printf("Condition:%s \n",forecast->getAttrValue("text"));
prabbat3 6:24d42cae48ad 199 printf("Temp:Low%sF High%sF\n",forecast->getAttrValue("low"),forecast->getAttrValue("high"));
prabbat3 7:b0f2169bdf48 200 } */
prabbat3 4:bb1bb1fc0cf5 201
prabbat3 5:be2cfaa8f4a2 202 printf("Parser complete!\n");
prabbat3 4:bb1bb1fc0cf5 203 }
prabbat3 4:bb1bb1fc0cf5 204
prabbat3 4:bb1bb1fc0cf5 205 void getTime(){
prabbat3 4:bb1bb1fc0cf5 206 NTPClient ntpClient;
prabbat3 4:bb1bb1fc0cf5 207 printf("Reading time..\n");
prabbat3 4:bb1bb1fc0cf5 208 char* domainName="us.pool.ntp.org"; //SET TO DOMAIN NAME OF SERVER GETTING TIME FROM
prabbat3 4:bb1bb1fc0cf5 209 //GETS THE TIME FROM THE SERVER
prabbat3 4:bb1bb1fc0cf5 210 //setTime(DOMAIN_NAME,PORT_NUMBER,TIME_OUT)
prabbat3 4:bb1bb1fc0cf5 211 //DOMAIN_NAME= domain name
prabbat3 4:bb1bb1fc0cf5 212 //PORT NUMBER=port number (123 for NTP)
prabbat3 4:bb1bb1fc0cf5 213 //TIME_OUT= timeout value for request
prabbat3 4:bb1bb1fc0cf5 214 ntpClient.setTime(domainName,123,0x00005000);
prabbat3 4:bb1bb1fc0cf5 215 printf("Time set.\n");
prabbat3 0:0a99e3fc2a46 216 }
prabbat3 0:0a99e3fc2a46 217
prabbat3 0:0a99e3fc2a46 218 void thread_alarm(void const *args)
prabbat3 0:0a99e3fc2a46 219 {
prabbat3 0:0a99e3fc2a46 220 while(1){
prabbat3 1:d7f65be2640d 221 if(_alarm.alarmSet && !alarmSignaled){
prabbat3 1:d7f65be2640d 222 led3 = 1;
prabbat3 0:0a99e3fc2a46 223 if(_alarm.hours == hour && _alarm.minutes == minute && _alarm.amPm == ampm){
prabbat3 1:d7f65be2640d 224 alarmSignaled = 1;
prabbat3 1:d7f65be2640d 225 turn_on();
prabbat3 0:0a99e3fc2a46 226 led4 = 1;
prabbat3 0:0a99e3fc2a46 227 }
prabbat3 0:0a99e3fc2a46 228 }
prabbat3 0:0a99e3fc2a46 229 Thread::wait(100);
prabbat3 0:0a99e3fc2a46 230 }
prabbat3 0:0a99e3fc2a46 231 }
prabbat3 0:0a99e3fc2a46 232
prabbat3 0:0a99e3fc2a46 233 void thread_display(void const *args){
prabbat3 0:0a99e3fc2a46 234 time_t ctTime; //system time structure
prabbat3 0:0a99e3fc2a46 235 uLCD.cls();
prabbat3 0:0a99e3fc2a46 236 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 237 uLCD.text_height(2);
prabbat3 0:0a99e3fc2a46 238 uLCD.text_width(1);
prabbat3 0:0a99e3fc2a46 239 char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA
prabbat3 0:0a99e3fc2a46 240 uLCD.textbackground_color(BLACK);
prabbat3 0:0a99e3fc2a46 241
prabbat3 0:0a99e3fc2a46 242 while (1) {
prabbat3 0:0a99e3fc2a46 243
prabbat3 0:0a99e3fc2a46 244 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 245 uLCD.color(RED);
prabbat3 0:0a99e3fc2a46 246 // loop and periodically update the LCD's time display
prabbat3 0:0a99e3fc2a46 247 ctTime = time(NULL)-(3600*4); //TIME with offset for eastern time US
prabbat3 0:0a99e3fc2a46 248
prabbat3 0:0a99e3fc2a46 249 //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER
prabbat3 0:0a99e3fc2a46 250 strftime(buffer,80,"%a %b %d %T %p %z %Z",localtime(&ctTime));
prabbat3 0:0a99e3fc2a46 251
prabbat3 0:0a99e3fc2a46 252 int i=0;
prabbat3 0:0a99e3fc2a46 253 char* chars_array = strtok(buffer, " :");
prabbat3 0:0a99e3fc2a46 254 //printf("Chars array: \n");
prabbat3 0:0a99e3fc2a46 255 while(chars_array)
prabbat3 0:0a99e3fc2a46 256 {
prabbat3 0:0a99e3fc2a46 257 switch(i){
prabbat3 0:0a99e3fc2a46 258 case 0:
prabbat3 0:0a99e3fc2a46 259 dayOfWeek = chars_array;
prabbat3 0:0a99e3fc2a46 260 break;
prabbat3 0:0a99e3fc2a46 261 case 1:
prabbat3 0:0a99e3fc2a46 262 month = chars_array;
prabbat3 0:0a99e3fc2a46 263 break;
prabbat3 0:0a99e3fc2a46 264 case 2:
prabbat3 0:0a99e3fc2a46 265 dayNum = chars_array;
prabbat3 0:0a99e3fc2a46 266 break;
prabbat3 0:0a99e3fc2a46 267 case 3:
prabbat3 0:0a99e3fc2a46 268 //chars_array = chars_array - 1;
prabbat3 0:0a99e3fc2a46 269 int hourTemp = atoi(chars_array);
prabbat3 0:0a99e3fc2a46 270 hourTemp--; //Daylight savings
prabbat3 0:0a99e3fc2a46 271 if(hourTemp > 12) hourTemp -= 12;
prabbat3 0:0a99e3fc2a46 272 hour = hourTemp;
prabbat3 0:0a99e3fc2a46 273 break;
prabbat3 0:0a99e3fc2a46 274 case 4:
prabbat3 0:0a99e3fc2a46 275 minute = atoi(chars_array);
prabbat3 0:0a99e3fc2a46 276 break;
prabbat3 0:0a99e3fc2a46 277 case 5:
prabbat3 0:0a99e3fc2a46 278 sec = atoi(chars_array);
prabbat3 0:0a99e3fc2a46 279 break;
prabbat3 0:0a99e3fc2a46 280 case 6:
prabbat3 0:0a99e3fc2a46 281 ampm = chars_array;
prabbat3 0:0a99e3fc2a46 282 break;
prabbat3 0:0a99e3fc2a46 283 }
prabbat3 0:0a99e3fc2a46 284 i++;
prabbat3 0:0a99e3fc2a46 285 chars_array = strtok(NULL, " :");
prabbat3 0:0a99e3fc2a46 286 }
prabbat3 0:0a99e3fc2a46 287
prabbat3 7:b0f2169bdf48 288 uLCD.printf(" %s, %s %s\n %02d:%02d:%02d %s\n", dayOfWeek, month, dayNum, hour, minute, sec, ampm);
prabbat3 7:b0f2169bdf48 289 uLCD.color(BLUE);
prabbat3 7:b0f2169bdf48 290 uLCD.printf(" Low: %s F\n High: %s F\n Weather:\n %s\n", lowTemperature, highTemperature, weatherCondition);
prabbat3 0:0a99e3fc2a46 291 if(_alarm.alarmSet){
prabbat3 0:0a99e3fc2a46 292 uLCD.color(GREEN);
prabbat3 7:b0f2169bdf48 293 if(_alarm.minutes < 10){ uLCD.printf(" Alarm:\n %d:0%d %s", _alarm.hours, _alarm.minutes, _alarm.amPm); }
prabbat3 0:0a99e3fc2a46 294 else{ uLCD.printf("\n\n Alarm:\n %d:%d %s", _alarm.hours, _alarm.minutes, _alarm.amPm); }
prabbat3 0:0a99e3fc2a46 295 }
prabbat3 0:0a99e3fc2a46 296
prabbat3 0:0a99e3fc2a46 297 Thread::wait(100);
prabbat3 0:0a99e3fc2a46 298 }
prabbat3 0:0a99e3fc2a46 299 }
prabbat3 0:0a99e3fc2a46 300
prabbat3 0:0a99e3fc2a46 301 void thread_server(void const *args)
prabbat3 0:0a99e3fc2a46 302 {
prabbat3 0:0a99e3fc2a46 303 RPCType::instance().register_types();
prabbat3 0:0a99e3fc2a46 304 HTTPServer srv = create_interactive_server();
prabbat3 0:0a99e3fc2a46 305
prabbat3 0:0a99e3fc2a46 306 if(!srv.init(SERVER_PORT))
prabbat3 0:0a99e3fc2a46 307 {
prabbat3 0:0a99e3fc2a46 308 eth.disconnect();
prabbat3 0:0a99e3fc2a46 309 printf("Thread 1 error.\n");
prabbat3 6:24d42cae48ad 310 return;
prabbat3 0:0a99e3fc2a46 311 }
prabbat3 0:0a99e3fc2a46 312
prabbat3 0:0a99e3fc2a46 313 srv.run();
prabbat3 0:0a99e3fc2a46 314 }
prabbat3 0:0a99e3fc2a46 315
prabbat3 0:0a99e3fc2a46 316 HTTPServer create_simple_server()
prabbat3 0:0a99e3fc2a46 317 {
prabbat3 0:0a99e3fc2a46 318 HTTPServer srv;
prabbat3 0:0a99e3fc2a46 319 srv.add_request_handler("DELETE", new DeleteRequestHandler());
prabbat3 0:0a99e3fc2a46 320 srv.add_request_handler("GET", new GetRequestHandler());
prabbat3 0:0a99e3fc2a46 321 srv.add_request_handler("PUT", new PutRequestHandler());
prabbat3 0:0a99e3fc2a46 322 return srv;
prabbat3 0:0a99e3fc2a46 323 }
prabbat3 0:0a99e3fc2a46 324
prabbat3 0:0a99e3fc2a46 325 HTTPServer create_interactive_server()
prabbat3 0:0a99e3fc2a46 326 {
prabbat3 0:0a99e3fc2a46 327 HTTPServer srv(new InteractiveHTMLFormatter());
prabbat3 0:0a99e3fc2a46 328 srv.add_request_handler("GET", new ComplexRequestHandler());
prabbat3 0:0a99e3fc2a46 329 return srv;
prabbat3 0:0a99e3fc2a46 330 }
prabbat3 1:d7f65be2640d 331
prabbat3 1:d7f65be2640d 332 // this interrupt routine is activated after a time delay set by dim value
prabbat3 1:d7f65be2640d 333 void triggerOn()
prabbat3 1:d7f65be2640d 334 {
prabbat3 1:d7f65be2640d 335 SSR = 1;
prabbat3 1:d7f65be2640d 336 led2=0;
prabbat3 1:d7f65be2640d 337 }
prabbat3 1:d7f65be2640d 338
prabbat3 1:d7f65be2640d 339 // this interrupt routine is activated by every AC line zero crossing
prabbat3 1:d7f65be2640d 340 // it is needed to synchronize the SSR turnon time delay to the AC line
prabbat3 1:d7f65be2640d 341 void dimmer()
prabbat3 1:d7f65be2640d 342 {
prabbat3 1:d7f65be2640d 343 // turn off SSR at zero crossing
prabbat3 1:d7f65be2640d 344 SSR = 0;
prabbat3 1:d7f65be2640d 345 // compute time delay using dim value and set timer interrupt
prabbat3 1:d7f65be2640d 346 // triggers SSR after a small post zero crossing time delay
prabbat3 1:d7f65be2640d 347 SSRtriggerOn.attach(&triggerOn,(1.001-dim)/(2*powerlinefrequency));
prabbat3 1:d7f65be2640d 348 led2=1;
prabbat3 1:d7f65be2640d 349 }
prabbat3 1:d7f65be2640d 350
prabbat3 1:d7f65be2640d 351 void turn_on(){
prabbat3 1:d7f65be2640d 352 //increase brightness
prabbat3 1:d7f65be2640d 353 for(dim = 0.0; dim <= 1.0; dim += 0.025) {
prabbat3 4:bb1bb1fc0cf5 354 led1 = (dim < 0 ? 0 : dim);
prabbat3 1:d7f65be2640d 355 wait(0.10);
prabbat3 0:0a99e3fc2a46 356 }
prabbat3 1:d7f65be2640d 357 dim = 1.0;
prabbat3 0:0a99e3fc2a46 358 }