Automated Blinds Controller, can be activated with pushbutton, or at time set by a slider switch

Dependencies:   Motor TextLCD mbed

Revision:
0:cf0ddcf40339
diff -r 000000000000 -r cf0ddcf40339 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Oct 17 05:47:51 2013 +0000
@@ -0,0 +1,81 @@
+// Sweep the motor speed from full-speed reverse (-1.0) to full speed forwards (1.0)
+ 
+#include "mbed.h"
+#include "Motor.h"
+#include "TextLCD.h"
+
+Motor m(p21, p23, p28); // pwm, fwd, rev
+DigitalOut led(LED1);
+TextLCD lcd(p14, p16, p17, p18, p19, p20, TextLCD::LCD20x4); // rs, e, d4-d7
+DigitalOut high(p22);
+DigitalIn pb(p6);
+DigitalOut high2(p29); 
+AnalogIn slider(p15);
+Serial pc(USBTX, USBRX);
+void open();
+void close();
+void printTime(double);
+int state;
+char buffer[32];
+time_t seconds;
+double setTime;
+struct tm* timeInfo;
+
+int main() {
+    set_time(    702000900    );  
+    state = 1; //Start with blinds closed (0 is open)
+    pb.mode(PullUp);
+    int lastPb = pb;
+    lcd.cls();
+    wait(1);
+    while (1){
+        seconds = time(NULL);
+        if (abs(slider-setTime)>.01){
+            setTime = slider;
+        }
+        printTime(setTime);
+        high = 1;
+        high2 = 1;
+        if (!pb){
+            if (state == 1){
+                open();
+                led = 1;
+                pc.printf("open");
+            }
+            else {
+                close();
+                led = 0;
+                pc.printf("close");
+            }
+        }
+        m.speed(0);
+        wait(.2);
+    }
+}
+
+void open() {
+    m.speed(-1);
+    wait(2.6);
+    state = 0;
+}
+
+void close() {
+    m.speed(1);
+    wait(2.6);
+    state = 1;
+}
+
+// Takes analog input from 0 to 1 and displays a time based on that
+void printTime(double in) {
+    int totMins = in*1440; //maps to integer based on mins in a day
+    int hrs = totMins/60;
+    int mins = totMins%60;
+    timeInfo = localtime(&seconds);
+    lcd.locate(0,0);
+    lcd.printf("%d:%d",timeInfo->tm_hour,timeInfo->tm_min);
+    lcd.locate(0,1);
+    lcd.printf("%d:%d",hrs,mins);
+    if ((state == 1) && (hrs == timeInfo->tm_hour) && (mins == timeInfo->tm_min)){
+        open();
+    }
+}
\ No newline at end of file