Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE EthernetInterface NTPClient mbed-rpc mbed-rtos mbed HTTPClient spxml
Diff: main.cpp
- Revision:
- 1:d7f65be2640d
- Parent:
- 0:0a99e3fc2a46
- Child:
- 2:0ec5c713bd50
--- a/main.cpp Sat Nov 15 19:36:44 2014 +0000
+++ b/main.cpp Sat Nov 15 20:45:33 2014 +0000
@@ -22,23 +22,42 @@
alarmModel _alarm;
string dayOfWeek, month, dayNum, ampm;
int hour, minute, sec;
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-DigitalOut led4(LED4);
+PwmOut led(LED1); // led 1 indicates dim value
+DigitalOut led2(LED2); // led 2 indicates delay time for interrupts
+DigitalOut led3(LED3); // Indicates the alarm has been set
+DigitalOut led4(LED4); // Indiciates the alarm is going off
+int alarmSignaled = 0;
+
+// pin for ZeroCross tail input
+// An external 1K pullup required
+InterruptIn zerocross(p22);
+
+// pin for PowerSSRtail output
+DigitalOut SSR(p21);
+
+//use timer interrupts to control dimming
+Timeout SSRtriggerOn;
+
+// dimmer value 0.0=off and 1.0=full on
+volatile float dim;
+
+// AC power line frequency
+const float powerlinefrequency=60.000;
+
// Function prototypes
HTTPServer create_simple_server();
HTTPServer create_interactive_server();
-void parse(char[], int*, char*);
void thread_server(void const *args);
void thread_display(void const *args);
void thread_alarm(void const *args);
+void triggerOn();
+void dimmer();
+void turn_on();
int main() {
-
+ dim = -1.0;
printf("Getting IP Address.. ");
-
uLCD.baudrate(2000000);
uLCD.cls();
uLCD.background_color(BLACK);
@@ -76,6 +95,15 @@
//TIME_OUT= timeout value for request
ntpClient.setTime(domainName,123,0x00005000);
printf("Time set.\n");
+
+
+ //set up interrupt routine to detect AC line zero crossings
+ zerocross.mode(PullNone);
+ wait(.2);
+ zerocross.rise(&dimmer);
+ // main program only sets dimmer level (dim)
+ // interrupt routines dim the light
+
Thread t1(thread_server); //start thread_server
Thread t2(thread_display);
@@ -87,11 +115,11 @@
void thread_alarm(void const *args)
{
while(1){
- if(_alarm.alarmSet){
- led1 = 1;
+ if(_alarm.alarmSet && !alarmSignaled){
+ led3 = 1;
if(_alarm.hours == hour && _alarm.minutes == minute && _alarm.amPm == ampm){
- led2 = 1;
- led3 = 1;
+ alarmSignaled = 1;
+ turn_on();
led4 = 1;
}
}
@@ -200,17 +228,31 @@
srv.add_request_handler("GET", new ComplexRequestHandler());
return srv;
}
-
-//SET FOR CSV FORMAT: NEEDS TO BE EDITED IF DIFFERENT FORMAT
-void parse(char buffer[], int *j, char *string) {
-//extracts next location string data item from buffer
- int i=0;
- for (i=0; i<=strlen(buffer); i++) { //TOTAL SIZE OF RETURNED DATA
- if ((buffer[*j+i] == ',')||(buffer[*j+i] == '\0' )) { //IF comma or end of string
- //comma is the string field delimiter
- string[i]=0; //SETS END OF SRTRING TO 0
- *j=*j+i+1; //UPDATES to 1 after comma seperated value
- break;
- } else string[i]=buffer[*j+i]; //Keep adding to the string
+
+// this interrupt routine is activated after a time delay set by dim value
+void triggerOn()
+{
+ SSR = 1;
+ led2=0;
+}
+
+// this interrupt routine is activated by every AC line zero crossing
+// it is needed to synchronize the SSR turnon time delay to the AC line
+void dimmer()
+{
+ // turn off SSR at zero crossing
+ SSR = 0;
+ // compute time delay using dim value and set timer interrupt
+ // triggers SSR after a small post zero crossing time delay
+ SSRtriggerOn.attach(&triggerOn,(1.001-dim)/(2*powerlinefrequency));
+ led2=1;
+}
+
+void turn_on(){
+ //increase brightness
+ for(dim = 0.0; dim <= 1.0; dim += 0.025) {
+ led = (dim < 0 ? 0 : dim);
+ wait(0.10);
}
+ dim = 1.0;
}
\ No newline at end of file