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:
adaruna3
Date:
Tue Dec 02 17:12:59 2014 +0000
Revision:
8:548f413118e9
Parent:
7:b0f2169bdf48
Child:
9:add6ce18f1b7
Everything works except AMPM and snooze

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