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:
Sun Dec 07 20:53:05 2014 +0000
Revision:
12:a99989062fee
Parent:
10:89cd9b6a251e
Code cleanup

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prabbat3 0:0a99e3fc2a46 1 // Includes
adaruna3 8:548f413118e9 2 #include "SDFileSystem.h"
adaruna3 8:548f413118e9 3 #include "PinDetect.h"
prabbat3 0:0a99e3fc2a46 4 #include "mbed.h"
prabbat3 0:0a99e3fc2a46 5 #include "NTPClient.h"
prabbat3 0:0a99e3fc2a46 6 #include "uLCD_4DGL.h"
prabbat3 0:0a99e3fc2a46 7 #include "EthernetInterface.h"
adaruna3 8:548f413118e9 8 #include <vector>
prabbat3 0:0a99e3fc2a46 9 #include <string>
prabbat3 0:0a99e3fc2a46 10 #include "mbed_rpc.h"
prabbat3 0:0a99e3fc2a46 11 #include "RPCCommand.h"
prabbat3 0:0a99e3fc2a46 12 #include "HTTPServer.h"
prabbat3 0:0a99e3fc2a46 13 #include "Formatter.h"
prabbat3 0:0a99e3fc2a46 14 #include "RequestHandler.h"
prabbat3 0:0a99e3fc2a46 15 #include "RPCType.h"
prabbat3 0:0a99e3fc2a46 16 #include "alarmContainer.h"
adaruna3 8:548f413118e9 17 #include "wave_player.h"
prabbat3 10:89cd9b6a251e 18 #include "HTTPClient.h"
prabbat3 0:0a99e3fc2a46 19
prabbat3 0:0a99e3fc2a46 20 // Defines
prabbat3 0:0a99e3fc2a46 21 #define SERVER_PORT 80 //HTTPSERVER
prabbat3 0:0a99e3fc2a46 22
prabbat3 0:0a99e3fc2a46 23 // Global variables
prabbat3 0:0a99e3fc2a46 24 EthernetInterface eth;
prabbat3 0:0a99e3fc2a46 25 uLCD_4DGL uLCD(p28, p27, p29); // serial tx, serial rx, reset pin;
prabbat3 0:0a99e3fc2a46 26 alarmModel _alarm;
prabbat3 0:0a99e3fc2a46 27 string dayOfWeek, month, dayNum, ampm;
prabbat3 0:0a99e3fc2a46 28 int hour, minute, sec;
prabbat3 4:bb1bb1fc0cf5 29 PwmOut led1(LED1); // led 1 indicates dim value
prabbat3 1:d7f65be2640d 30 DigitalOut led2(LED2); // led 2 indicates delay time for interrupts
prabbat3 1:d7f65be2640d 31 DigitalOut led3(LED3); // Indicates the alarm has been set
prabbat3 1:d7f65be2640d 32 DigitalOut led4(LED4); // Indiciates the alarm is going off
prabbat3 1:d7f65be2640d 33 int alarmSignaled = 0;
adaruna3 8:548f413118e9 34 PwmOut alarm(p25);
adaruna3 8:548f413118e9 35 AnalogOut DACout(p18);
adaruna3 8:548f413118e9 36 PinDetect snooze(p23);
adaruna3 8:548f413118e9 37 PinDetect stop(p24);
adaruna3 8:548f413118e9 38 SDFileSystem sd(p5, p6, p7, p8, p12, "sd"); //SD card
adaruna3 8:548f413118e9 39 FILE *wave_file;
adaruna3 8:548f413118e9 40 string filepath = "/sd/mymusic/";
prabbat3 10:89cd9b6a251e 41 string weatherCondition = "";
prabbat3 10:89cd9b6a251e 42 string lowTemperature = "";
prabbat3 10:89cd9b6a251e 43 string highTemperature = "";
adaruna3 8:548f413118e9 44 volatile bool t = true;
adaruna3 8:548f413118e9 45 volatile bool play = true;
adaruna3 8:548f413118e9 46 volatile float vol = .52;
adaruna3 8:548f413118e9 47 volatile bool insert;
adaruna3 8:548f413118e9 48 volatile int index;
adaruna3 8:548f413118e9 49 wave_player waver(&DACout);
adaruna3 8:548f413118e9 50 int num = 0;
adaruna3 8:548f413118e9 51 vector<string> filenames; //filenames are stored in a vector string
adaruna3 8:548f413118e9 52
prabbat3 1:d7f65be2640d 53 // pin for ZeroCross tail input
prabbat3 1:d7f65be2640d 54 // An external 1K pullup required
prabbat3 1:d7f65be2640d 55 InterruptIn zerocross(p22);
prabbat3 1:d7f65be2640d 56
prabbat3 1:d7f65be2640d 57 // pin for PowerSSRtail output
prabbat3 1:d7f65be2640d 58 DigitalOut SSR(p21);
prabbat3 1:d7f65be2640d 59
prabbat3 1:d7f65be2640d 60 //use timer interrupts to control dimming
prabbat3 1:d7f65be2640d 61 Timeout SSRtriggerOn;
prabbat3 1:d7f65be2640d 62
prabbat3 1:d7f65be2640d 63 // dimmer value 0.0=off and 1.0=full on
prabbat3 1:d7f65be2640d 64 volatile float dim;
prabbat3 1:d7f65be2640d 65
prabbat3 1:d7f65be2640d 66 // AC power line frequency
prabbat3 1:d7f65be2640d 67 const float powerlinefrequency=60.000;
prabbat3 1:d7f65be2640d 68
prabbat3 0:0a99e3fc2a46 69 // Function prototypes
prabbat3 0:0a99e3fc2a46 70 HTTPServer create_simple_server();
prabbat3 0:0a99e3fc2a46 71 HTTPServer create_interactive_server();
adaruna3 8:548f413118e9 72 void stop_hit_callback(void);
adaruna3 8:548f413118e9 73 void snooze_hit_callback(void);
adaruna3 8:548f413118e9 74 void read_file_names(char *dir);
adaruna3 9:add6ce18f1b7 75 void play_wake_up(void);
prabbat3 0:0a99e3fc2a46 76 void thread_server(void const *args);
prabbat3 0:0a99e3fc2a46 77 void thread_display(void const *args);
prabbat3 0:0a99e3fc2a46 78 void thread_alarm(void const *args);
prabbat3 1:d7f65be2640d 79 void triggerOn();
prabbat3 1:d7f65be2640d 80 void dimmer();
prabbat3 1:d7f65be2640d 81 void turn_on();
adaruna3 8:548f413118e9 82 void getAndParseWeather();
adaruna3 8:548f413118e9 83 char* getWeather();
prabbat3 4:bb1bb1fc0cf5 84 void getTime();
adaruna3 8:548f413118e9 85 void parseResults(char*);
prabbat3 4:bb1bb1fc0cf5 86
prabbat3 0:0a99e3fc2a46 87 int main() {
adaruna3 8:548f413118e9 88 snooze.mode(PullUp);
adaruna3 8:548f413118e9 89 stop.mode(PullUp);
adaruna3 8:548f413118e9 90 wait(.01);
adaruna3 8:548f413118e9 91 snooze.attach_deasserted(&snooze_hit_callback);
adaruna3 8:548f413118e9 92 stop.attach_deasserted(&stop_hit_callback);
adaruna3 8:548f413118e9 93 stop.setSampleFrequency();
adaruna3 9:add6ce18f1b7 94 snooze.setSampleFrequency(); //default is 20KHz sampling
adaruna3 9:add6ce18f1b7 95
adaruna3 9:add6ce18f1b7 96 insert = sd.SD_inserted();
adaruna3 9:add6ce18f1b7 97 if(insert){
adaruna3 8:548f413118e9 98 printf("Inserted worked.");
adaruna3 8:548f413118e9 99 }
adaruna3 8:548f413118e9 100 printf("Attempting to read file names");
adaruna3 8:548f413118e9 101 read_file_names("/sd/myMusic");
adaruna3 8:548f413118e9 102 printf("File names read");
adaruna3 8:548f413118e9 103
adaruna3 8:548f413118e9 104 wave_file = fopen( (filepath+filenames[index]).c_str(), "r");
adaruna3 8:548f413118e9 105 printf("Wave file opened");
adaruna3 8:548f413118e9 106
prabbat3 1:d7f65be2640d 107 dim = -1.0;
prabbat3 0:0a99e3fc2a46 108 printf("Getting IP Address.. ");
prabbat3 0:0a99e3fc2a46 109 uLCD.baudrate(2000000);
prabbat3 0:0a99e3fc2a46 110 uLCD.cls();
prabbat3 0:0a99e3fc2a46 111 uLCD.background_color(BLACK);
prabbat3 0:0a99e3fc2a46 112 uLCD.textbackground_color(BLACK);
prabbat3 0:0a99e3fc2a46 113 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 114 uLCD.color(BLUE);
prabbat3 0:0a99e3fc2a46 115 uLCD.text_height(2);
prabbat3 0:0a99e3fc2a46 116 uLCD.text_width(2);
prabbat3 0:0a99e3fc2a46 117 uLCD.printf("\n\nUniv Time\n Clock\n");
prabbat3 0:0a99e3fc2a46 118 uLCD.text_height(1);
prabbat3 0:0a99e3fc2a46 119 uLCD.text_width(1);
prabbat3 0:0a99e3fc2a46 120 uLCD.printf(" Loading...\n");
prabbat3 0:0a99e3fc2a46 121 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 122
prabbat3 0:0a99e3fc2a46 123 if(eth.init())
prabbat3 0:0a99e3fc2a46 124 {
prabbat3 0:0a99e3fc2a46 125 printf("Error while initializing the ethernet interface.\n");
prabbat3 0:0a99e3fc2a46 126 return -1;
prabbat3 0:0a99e3fc2a46 127 }
prabbat3 0:0a99e3fc2a46 128 wait(5);
prabbat3 0:0a99e3fc2a46 129 if(eth.connect())
prabbat3 0:0a99e3fc2a46 130 {
prabbat3 0:0a99e3fc2a46 131 printf("Error while starting the ethernet interface.\n");
prabbat3 0:0a99e3fc2a46 132 return -1;
prabbat3 0:0a99e3fc2a46 133 }
prabbat3 0:0a99e3fc2a46 134
prabbat3 0:0a99e3fc2a46 135 printf("IP Address is %s\n", eth.getIPAddress());
prabbat3 0:0a99e3fc2a46 136
adaruna3 8:548f413118e9 137 getAndParseWeather();
prabbat3 5:be2cfaa8f4a2 138 wait(1);
prabbat3 4:bb1bb1fc0cf5 139 getTime();
prabbat3 4:bb1bb1fc0cf5 140 wait(1);
prabbat3 1:d7f65be2640d 141
prabbat3 1:d7f65be2640d 142 //set up interrupt routine to detect AC line zero crossings
prabbat3 1:d7f65be2640d 143 zerocross.mode(PullNone);
prabbat3 1:d7f65be2640d 144 wait(.2);
prabbat3 1:d7f65be2640d 145 zerocross.rise(&dimmer);
prabbat3 1:d7f65be2640d 146 // main program only sets dimmer level (dim)
prabbat3 1:d7f65be2640d 147 // interrupt routines dim the light
prabbat3 0:0a99e3fc2a46 148
prabbat3 7:b0f2169bdf48 149 Thread t1(thread_server); //start thread_server
prabbat3 0:0a99e3fc2a46 150 Thread t2(thread_display);
prabbat3 0:0a99e3fc2a46 151 Thread t3(thread_alarm);
prabbat3 0:0a99e3fc2a46 152
prabbat3 4:bb1bb1fc0cf5 153 while(1){
prabbat3 4:bb1bb1fc0cf5 154 led1=!led1;
prabbat3 4:bb1bb1fc0cf5 155 Thread::wait(1000);
prabbat3 4:bb1bb1fc0cf5 156 }
prabbat3 4:bb1bb1fc0cf5 157 }
prabbat3 4:bb1bb1fc0cf5 158
adaruna3 8:548f413118e9 159 void getAndParseWeather(){
adaruna3 8:548f413118e9 160 char* buf = getWeather();
adaruna3 8:548f413118e9 161 wait(1);
adaruna3 8:548f413118e9 162 parseResults(buf);
adaruna3 8:548f413118e9 163 }
adaruna3 8:548f413118e9 164
adaruna3 8:548f413118e9 165 char* getWeather(){
prabbat3 4:bb1bb1fc0cf5 166 /*** WEATHER****/
adaruna3 8:548f413118e9 167 char buf[3000];
prabbat3 4:bb1bb1fc0cf5 168 printf("Getting weather..\n");
prabbat3 4:bb1bb1fc0cf5 169 HTTPClient http;
prabbat3 6:24d42cae48ad 170 int retHttp = http.get("http://weather.yahooapis.com/forecastrss?w=2357024&u=f", buf, sizeof(buf));
prabbat3 4:bb1bb1fc0cf5 171
prabbat3 4:bb1bb1fc0cf5 172 switch(retHttp){
prabbat3 4:bb1bb1fc0cf5 173 case HTTP_OK:
prabbat3 4:bb1bb1fc0cf5 174 printf("Read completely\n");
prabbat3 4:bb1bb1fc0cf5 175 break;
prabbat3 4:bb1bb1fc0cf5 176 case HTTP_TIMEOUT:
prabbat3 4:bb1bb1fc0cf5 177 printf("Connection Timeout\n");
prabbat3 4:bb1bb1fc0cf5 178 break;
prabbat3 4:bb1bb1fc0cf5 179 case HTTP_CONN:
prabbat3 4:bb1bb1fc0cf5 180 printf("Connection Error\n");
prabbat3 4:bb1bb1fc0cf5 181 break;
prabbat3 4:bb1bb1fc0cf5 182 default:
prabbat3 4:bb1bb1fc0cf5 183 printf("Error\n");
adaruna3 8:548f413118e9 184 }
adaruna3 8:548f413118e9 185
adaruna3 8:548f413118e9 186 return buf;
prabbat3 5:be2cfaa8f4a2 187 }
prabbat3 4:bb1bb1fc0cf5 188
adaruna3 8:548f413118e9 189 void parseResults(char* buf){
adaruna3 8:548f413118e9 190 printf("Starting parser\n");
prabbat3 7:b0f2169bdf48 191 int i=0;
prabbat3 7:b0f2169bdf48 192 char* chars_array = strtok(buf, "\"");
prabbat3 7:b0f2169bdf48 193 while(chars_array)
prabbat3 7:b0f2169bdf48 194 {
prabbat3 7:b0f2169bdf48 195 if(i==63){
prabbat3 7:b0f2169bdf48 196 lowTemperature = chars_array;
prabbat3 7:b0f2169bdf48 197 printf("Low temp: %s F\n", lowTemperature);
prabbat3 7:b0f2169bdf48 198 }
prabbat3 7:b0f2169bdf48 199 else if(i==65){
prabbat3 7:b0f2169bdf48 200 highTemperature = chars_array;
prabbat3 7:b0f2169bdf48 201 printf("Low temp: %s F\n", highTemperature);
prabbat3 7:b0f2169bdf48 202 }
prabbat3 7:b0f2169bdf48 203 else if (i==67){
prabbat3 7:b0f2169bdf48 204 weatherCondition = chars_array;
prabbat3 7:b0f2169bdf48 205 printf("Weather: %s\n", weatherCondition);
prabbat3 7:b0f2169bdf48 206 }
prabbat3 7:b0f2169bdf48 207
prabbat3 7:b0f2169bdf48 208 i++;
prabbat3 7:b0f2169bdf48 209 chars_array = strtok(NULL, "\"");
prabbat3 7:b0f2169bdf48 210 }
prabbat3 5:be2cfaa8f4a2 211
prabbat3 5:be2cfaa8f4a2 212 printf("Parser complete!\n");
prabbat3 4:bb1bb1fc0cf5 213 }
prabbat3 4:bb1bb1fc0cf5 214
prabbat3 4:bb1bb1fc0cf5 215 void getTime(){
prabbat3 4:bb1bb1fc0cf5 216 NTPClient ntpClient;
prabbat3 4:bb1bb1fc0cf5 217 printf("Reading time..\n");
prabbat3 4:bb1bb1fc0cf5 218 char* domainName="us.pool.ntp.org"; //SET TO DOMAIN NAME OF SERVER GETTING TIME FROM
prabbat3 4:bb1bb1fc0cf5 219 //GETS THE TIME FROM THE SERVER
prabbat3 4:bb1bb1fc0cf5 220 //setTime(DOMAIN_NAME,PORT_NUMBER,TIME_OUT)
prabbat3 4:bb1bb1fc0cf5 221 //DOMAIN_NAME= domain name
prabbat3 4:bb1bb1fc0cf5 222 //PORT NUMBER=port number (123 for NTP)
prabbat3 4:bb1bb1fc0cf5 223 //TIME_OUT= timeout value for request
prabbat3 4:bb1bb1fc0cf5 224 ntpClient.setTime(domainName,123,0x00005000);
prabbat3 4:bb1bb1fc0cf5 225 printf("Time set.\n");
prabbat3 0:0a99e3fc2a46 226 }
prabbat3 0:0a99e3fc2a46 227
prabbat3 0:0a99e3fc2a46 228 void thread_alarm(void const *args)
prabbat3 0:0a99e3fc2a46 229 {
prabbat3 0:0a99e3fc2a46 230 while(1){
prabbat3 1:d7f65be2640d 231 if(_alarm.alarmSet && !alarmSignaled){
prabbat3 1:d7f65be2640d 232 led3 = 1;
prabbat3 0:0a99e3fc2a46 233 if(_alarm.hours == hour && _alarm.minutes == minute && _alarm.amPm == ampm){
prabbat3 1:d7f65be2640d 234 alarmSignaled = 1;
adaruna3 9:add6ce18f1b7 235 //increase brightness
adaruna3 9:add6ce18f1b7 236 for(dim = 0.0; dim <= 1.0; dim += 0.025) {
adaruna3 9:add6ce18f1b7 237 led1 = (dim < 0 ? 0 : dim);
adaruna3 9:add6ce18f1b7 238 wait(0.3);
adaruna3 9:add6ce18f1b7 239 }
adaruna3 9:add6ce18f1b7 240 dim = 1.0;
adaruna3 9:add6ce18f1b7 241 led4 = 1;
adaruna3 8:548f413118e9 242 play_wake_up();
prabbat3 0:0a99e3fc2a46 243 }
prabbat3 0:0a99e3fc2a46 244 }
prabbat3 0:0a99e3fc2a46 245 Thread::wait(100);
prabbat3 0:0a99e3fc2a46 246 }
prabbat3 0:0a99e3fc2a46 247 }
prabbat3 0:0a99e3fc2a46 248
prabbat3 0:0a99e3fc2a46 249 void thread_display(void const *args){
prabbat3 0:0a99e3fc2a46 250 time_t ctTime; //system time structure
prabbat3 0:0a99e3fc2a46 251 uLCD.cls();
prabbat3 0:0a99e3fc2a46 252 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 253 uLCD.text_height(2);
prabbat3 0:0a99e3fc2a46 254 uLCD.text_width(1);
prabbat3 0:0a99e3fc2a46 255 char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA
prabbat3 0:0a99e3fc2a46 256 uLCD.textbackground_color(BLACK);
prabbat3 0:0a99e3fc2a46 257
prabbat3 0:0a99e3fc2a46 258 while (1) {
prabbat3 0:0a99e3fc2a46 259
prabbat3 0:0a99e3fc2a46 260 uLCD.locate(0,0);
prabbat3 0:0a99e3fc2a46 261 uLCD.color(RED);
prabbat3 0:0a99e3fc2a46 262 // loop and periodically update the LCD's time display
prabbat3 0:0a99e3fc2a46 263 ctTime = time(NULL)-(3600*4); //TIME with offset for eastern time US
prabbat3 0:0a99e3fc2a46 264
prabbat3 0:0a99e3fc2a46 265 //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER
prabbat3 0:0a99e3fc2a46 266 strftime(buffer,80,"%a %b %d %T %p %z %Z",localtime(&ctTime));
prabbat3 0:0a99e3fc2a46 267
prabbat3 0:0a99e3fc2a46 268 int i=0;
prabbat3 0:0a99e3fc2a46 269 char* chars_array = strtok(buffer, " :");
prabbat3 0:0a99e3fc2a46 270 while(chars_array)
prabbat3 0:0a99e3fc2a46 271 {
prabbat3 0:0a99e3fc2a46 272 switch(i){
prabbat3 0:0a99e3fc2a46 273 case 0:
prabbat3 0:0a99e3fc2a46 274 dayOfWeek = chars_array;
prabbat3 0:0a99e3fc2a46 275 break;
prabbat3 0:0a99e3fc2a46 276 case 1:
prabbat3 0:0a99e3fc2a46 277 month = chars_array;
prabbat3 0:0a99e3fc2a46 278 break;
prabbat3 0:0a99e3fc2a46 279 case 2:
prabbat3 0:0a99e3fc2a46 280 dayNum = chars_array;
prabbat3 0:0a99e3fc2a46 281 break;
prabbat3 0:0a99e3fc2a46 282 case 3:
prabbat3 0:0a99e3fc2a46 283 int hourTemp = atoi(chars_array);
prabbat3 0:0a99e3fc2a46 284 hourTemp--; //Daylight savings
prabbat3 0:0a99e3fc2a46 285 if(hourTemp > 12) hourTemp -= 12;
prabbat3 0:0a99e3fc2a46 286 hour = hourTemp;
prabbat3 0:0a99e3fc2a46 287 break;
prabbat3 0:0a99e3fc2a46 288 case 4:
prabbat3 0:0a99e3fc2a46 289 minute = atoi(chars_array);
prabbat3 0:0a99e3fc2a46 290 break;
prabbat3 0:0a99e3fc2a46 291 case 5:
prabbat3 0:0a99e3fc2a46 292 sec = atoi(chars_array);
prabbat3 0:0a99e3fc2a46 293 break;
prabbat3 0:0a99e3fc2a46 294 case 6:
prabbat3 0:0a99e3fc2a46 295 ampm = chars_array;
prabbat3 0:0a99e3fc2a46 296 break;
prabbat3 0:0a99e3fc2a46 297 }
prabbat3 0:0a99e3fc2a46 298 i++;
prabbat3 0:0a99e3fc2a46 299 chars_array = strtok(NULL, " :");
prabbat3 0:0a99e3fc2a46 300 }
prabbat3 0:0a99e3fc2a46 301
prabbat3 7:b0f2169bdf48 302 uLCD.printf(" %s, %s %s\n %02d:%02d:%02d %s\n", dayOfWeek, month, dayNum, hour, minute, sec, ampm);
prabbat3 7:b0f2169bdf48 303 uLCD.color(BLUE);
adaruna3 8:548f413118e9 304 uLCD.printf(" Low: %s F\n High: %s F\n Weather:\n %s", lowTemperature, highTemperature, weatherCondition);
prabbat3 0:0a99e3fc2a46 305 if(_alarm.alarmSet){
adaruna3 8:548f413118e9 306 uLCD.locate(0,6);
prabbat3 0:0a99e3fc2a46 307 uLCD.color(GREEN);
adaruna3 8:548f413118e9 308 uLCD.printf(" Alarm:\n %d:%02d %s", _alarm.hours, _alarm.minutes, _alarm.amPm);
prabbat3 0:0a99e3fc2a46 309 }
prabbat3 0:0a99e3fc2a46 310
prabbat3 0:0a99e3fc2a46 311 Thread::wait(100);
prabbat3 0:0a99e3fc2a46 312 }
prabbat3 0:0a99e3fc2a46 313 }
prabbat3 0:0a99e3fc2a46 314
prabbat3 0:0a99e3fc2a46 315 void thread_server(void const *args)
prabbat3 0:0a99e3fc2a46 316 {
prabbat3 0:0a99e3fc2a46 317 RPCType::instance().register_types();
prabbat3 0:0a99e3fc2a46 318 HTTPServer srv = create_interactive_server();
prabbat3 0:0a99e3fc2a46 319
prabbat3 0:0a99e3fc2a46 320 if(!srv.init(SERVER_PORT))
prabbat3 0:0a99e3fc2a46 321 {
prabbat3 0:0a99e3fc2a46 322 eth.disconnect();
prabbat3 0:0a99e3fc2a46 323 printf("Thread 1 error.\n");
prabbat3 6:24d42cae48ad 324 return;
prabbat3 0:0a99e3fc2a46 325 }
prabbat3 0:0a99e3fc2a46 326
prabbat3 0:0a99e3fc2a46 327 srv.run();
prabbat3 0:0a99e3fc2a46 328 }
prabbat3 0:0a99e3fc2a46 329
prabbat3 0:0a99e3fc2a46 330 HTTPServer create_simple_server()
prabbat3 0:0a99e3fc2a46 331 {
prabbat3 0:0a99e3fc2a46 332 HTTPServer srv;
prabbat3 0:0a99e3fc2a46 333 srv.add_request_handler("DELETE", new DeleteRequestHandler());
prabbat3 0:0a99e3fc2a46 334 srv.add_request_handler("GET", new GetRequestHandler());
prabbat3 0:0a99e3fc2a46 335 srv.add_request_handler("PUT", new PutRequestHandler());
prabbat3 0:0a99e3fc2a46 336 return srv;
prabbat3 0:0a99e3fc2a46 337 }
prabbat3 0:0a99e3fc2a46 338
prabbat3 0:0a99e3fc2a46 339 HTTPServer create_interactive_server()
prabbat3 0:0a99e3fc2a46 340 {
prabbat3 0:0a99e3fc2a46 341 HTTPServer srv(new InteractiveHTMLFormatter());
prabbat3 0:0a99e3fc2a46 342 srv.add_request_handler("GET", new ComplexRequestHandler());
prabbat3 0:0a99e3fc2a46 343 return srv;
prabbat3 0:0a99e3fc2a46 344 }
prabbat3 1:d7f65be2640d 345
prabbat3 1:d7f65be2640d 346 // this interrupt routine is activated after a time delay set by dim value
prabbat3 1:d7f65be2640d 347 void triggerOn()
prabbat3 1:d7f65be2640d 348 {
prabbat3 1:d7f65be2640d 349 SSR = 1;
prabbat3 1:d7f65be2640d 350 led2=0;
prabbat3 1:d7f65be2640d 351 }
prabbat3 1:d7f65be2640d 352
prabbat3 1:d7f65be2640d 353 // this interrupt routine is activated by every AC line zero crossing
prabbat3 1:d7f65be2640d 354 // it is needed to synchronize the SSR turnon time delay to the AC line
prabbat3 1:d7f65be2640d 355 void dimmer()
prabbat3 1:d7f65be2640d 356 {
prabbat3 1:d7f65be2640d 357 // turn off SSR at zero crossing
prabbat3 1:d7f65be2640d 358 SSR = 0;
prabbat3 1:d7f65be2640d 359 // compute time delay using dim value and set timer interrupt
prabbat3 1:d7f65be2640d 360 // triggers SSR after a small post zero crossing time delay
prabbat3 1:d7f65be2640d 361 SSRtriggerOn.attach(&triggerOn,(1.001-dim)/(2*powerlinefrequency));
prabbat3 1:d7f65be2640d 362 led2=1;
prabbat3 1:d7f65be2640d 363 }
prabbat3 1:d7f65be2640d 364
prabbat3 1:d7f65be2640d 365 void turn_on(){
prabbat3 1:d7f65be2640d 366 //increase brightness
adaruna3 9:add6ce18f1b7 367 for(dim = 0.0; dim <= 1.0; dim += 0.005) {
prabbat3 4:bb1bb1fc0cf5 368 led1 = (dim < 0 ? 0 : dim);
adaruna3 9:add6ce18f1b7 369 wait(0.3);
prabbat3 0:0a99e3fc2a46 370 }
prabbat3 1:d7f65be2640d 371 dim = 1.0;
adaruna3 8:548f413118e9 372 }
adaruna3 8:548f413118e9 373
adaruna3 8:548f413118e9 374 void stop_hit_callback(void){
adaruna3 8:548f413118e9 375 vol = 0.0;
adaruna3 8:548f413118e9 376 t = false;
adaruna3 8:548f413118e9 377 if (insert == true){
adaruna3 9:add6ce18f1b7 378 play = !play;
adaruna3 9:add6ce18f1b7 379 }
adaruna3 8:548f413118e9 380 }
adaruna3 8:548f413118e9 381
adaruna3 8:548f413118e9 382 void snooze_hit_callback(void) {
adaruna3 8:548f413118e9 383 alarm = 0.0;
adaruna3 9:add6ce18f1b7 384 wait(5);
adaruna3 8:548f413118e9 385 if (insert == true) {
adaruna3 8:548f413118e9 386 play =! play;
adaruna3 9:add6ce18f1b7 387 wait(5);
adaruna3 8:548f413118e9 388 play =! play;
adaruna3 8:548f413118e9 389 }
adaruna3 8:548f413118e9 390 }
adaruna3 8:548f413118e9 391
adaruna3 8:548f413118e9 392 void read_file_names(char *dir)
adaruna3 8:548f413118e9 393 {
adaruna3 8:548f413118e9 394 DIR *dp;
adaruna3 8:548f413118e9 395 struct dirent *dirp;
adaruna3 8:548f413118e9 396 dp = opendir(dir);
adaruna3 8:548f413118e9 397 //read all directory and file names in current directory into filename vector
adaruna3 8:548f413118e9 398 while((dirp = readdir(dp)) != NULL) {
adaruna3 8:548f413118e9 399 filenames.push_back(string(dirp->d_name));
adaruna3 8:548f413118e9 400 num++;
adaruna3 8:548f413118e9 401 }
adaruna3 8:548f413118e9 402 num= num;
adaruna3 8:548f413118e9 403 }
adaruna3 8:548f413118e9 404
adaruna3 8:548f413118e9 405 void play_wake_up(void){
prabbat3 10:89cd9b6a251e 406 while(t == true) {
prabbat3 10:89cd9b6a251e 407 printf("Started playing.");
prabbat3 10:89cd9b6a251e 408 if ((insert == true) && (play ==true)) {
prabbat3 10:89cd9b6a251e 409 waver.play(wave_file, &play);
prabbat3 10:89cd9b6a251e 410 if (feof(wave_file)) // when playback ends file will close and play will equal false
prabbat3 10:89cd9b6a251e 411 {
prabbat3 10:89cd9b6a251e 412 fclose(wave_file);
prabbat3 10:89cd9b6a251e 413 printf("Wav ended.");
adaruna3 8:548f413118e9 414 }
prabbat3 10:89cd9b6a251e 415
adaruna3 8:548f413118e9 416 }
prabbat3 10:89cd9b6a251e 417 if ((insert == false)&&(play == true)) {
prabbat3 10:89cd9b6a251e 418 // generate a 500Hz tone using PWM hardware output
prabbat3 10:89cd9b6a251e 419 for (int j=0; j<26; j=j+2) {
prabbat3 10:89cd9b6a251e 420 alarm.period(1.0/500.0); // 500hz period
prabbat3 10:89cd9b6a251e 421 alarm =vol; //50% duty cycle - max volume
prabbat3 10:89cd9b6a251e 422 wait(.5);
prabbat3 10:89cd9b6a251e 423 alarm.period(0.0/500.0);
prabbat3 10:89cd9b6a251e 424 wait(.5);
prabbat3 10:89cd9b6a251e 425 } // end of for
prabbat3 10:89cd9b6a251e 426
prabbat3 10:89cd9b6a251e 427 // two tone police siren effect - two periods or two frequencies
prabbat3 10:89cd9b6a251e 428 // increase volume - by changing the PWM duty cycle
prabbat3 10:89cd9b6a251e 429 for (int i=0; i<26; i=i+2) {
prabbat3 10:89cd9b6a251e 430 alarm = vol;
prabbat3 10:89cd9b6a251e 431 alarm.period(1.0/969.0);
prabbat3 10:89cd9b6a251e 432 wait(.5);
prabbat3 10:89cd9b6a251e 433 alarm.period(1.0/800.0);
prabbat3 10:89cd9b6a251e 434 wait(.5);
prabbat3 10:89cd9b6a251e 435 }
prabbat3 10:89cd9b6a251e 436 }
prabbat3 10:89cd9b6a251e 437 }
prabbat3 10:89cd9b6a251e 438 alarm = 0.0;
prabbat3 0:0a99e3fc2a46 439 }