Automated Blinds Controller, can be activated with pushbutton, or at time set by a slider switch
Dependencies: Motor TextLCD mbed
Diff: main.cpp
- Revision:
- 0:cf0ddcf40339
--- /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