modifications to original autoblindscontroller

Fork of AutoBlindsController by Max Mujica

Committer:
nparham3
Date:
Thu Oct 17 17:35:45 2013 +0000
Revision:
1:3fa00a470e50
Parent:
0:cf0ddcf40339
Made slight aesthetic modifications to fix LCD floating point and add labels.  Continuing to work on real-time systems with ethernet.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mmujica6 0:cf0ddcf40339 1 // Sweep the motor speed from full-speed reverse (-1.0) to full speed forwards (1.0)
mmujica6 0:cf0ddcf40339 2
mmujica6 0:cf0ddcf40339 3 #include "mbed.h"
mmujica6 0:cf0ddcf40339 4 #include "Motor.h"
mmujica6 0:cf0ddcf40339 5 #include "TextLCD.h"
mmujica6 0:cf0ddcf40339 6
mmujica6 0:cf0ddcf40339 7 Motor m(p21, p23, p28); // pwm, fwd, rev
mmujica6 0:cf0ddcf40339 8 DigitalOut led(LED1);
nparham3 1:3fa00a470e50 9 DigitalOut test(LED2);
mmujica6 0:cf0ddcf40339 10 TextLCD lcd(p14, p16, p17, p18, p19, p20, TextLCD::LCD20x4); // rs, e, d4-d7
mmujica6 0:cf0ddcf40339 11 DigitalOut high(p22);
mmujica6 0:cf0ddcf40339 12 DigitalIn pb(p6);
mmujica6 0:cf0ddcf40339 13 DigitalOut high2(p29);
mmujica6 0:cf0ddcf40339 14 AnalogIn slider(p15);
mmujica6 0:cf0ddcf40339 15 Serial pc(USBTX, USBRX);
mmujica6 0:cf0ddcf40339 16 void open();
mmujica6 0:cf0ddcf40339 17 void close();
mmujica6 0:cf0ddcf40339 18 void printTime(double);
mmujica6 0:cf0ddcf40339 19 int state;
mmujica6 0:cf0ddcf40339 20 char buffer[32];
mmujica6 0:cf0ddcf40339 21 time_t seconds;
mmujica6 0:cf0ddcf40339 22 double setTime;
mmujica6 0:cf0ddcf40339 23 struct tm* timeInfo;
mmujica6 0:cf0ddcf40339 24
mmujica6 0:cf0ddcf40339 25 int main() {
mmujica6 0:cf0ddcf40339 26 set_time( 702000900 );
mmujica6 0:cf0ddcf40339 27 state = 1; //Start with blinds closed (0 is open)
mmujica6 0:cf0ddcf40339 28 pb.mode(PullUp);
mmujica6 0:cf0ddcf40339 29 int lastPb = pb;
mmujica6 0:cf0ddcf40339 30 lcd.cls();
mmujica6 0:cf0ddcf40339 31 wait(1);
mmujica6 0:cf0ddcf40339 32 while (1){
mmujica6 0:cf0ddcf40339 33 seconds = time(NULL);
nparham3 1:3fa00a470e50 34 if (abs(slider.read()-setTime)>.006){ // <-- this is the line of percision
nparham3 1:3fa00a470e50 35 setTime = slider.read();
mmujica6 0:cf0ddcf40339 36 }
mmujica6 0:cf0ddcf40339 37 printTime(setTime);
nparham3 1:3fa00a470e50 38
nparham3 1:3fa00a470e50 39 pc.printf("%f \n", slider.read());
nparham3 1:3fa00a470e50 40 high = 1; //seems unused
nparham3 1:3fa00a470e50 41 high2 = 1; //seems unused
nparham3 1:3fa00a470e50 42 if (!pb){
mmujica6 0:cf0ddcf40339 43 if (state == 1){
mmujica6 0:cf0ddcf40339 44 open();
mmujica6 0:cf0ddcf40339 45 led = 1;
mmujica6 0:cf0ddcf40339 46 pc.printf("open");
mmujica6 0:cf0ddcf40339 47 }
mmujica6 0:cf0ddcf40339 48 else {
mmujica6 0:cf0ddcf40339 49 close();
mmujica6 0:cf0ddcf40339 50 led = 0;
mmujica6 0:cf0ddcf40339 51 pc.printf("close");
mmujica6 0:cf0ddcf40339 52 }
mmujica6 0:cf0ddcf40339 53 }
mmujica6 0:cf0ddcf40339 54 m.speed(0);
mmujica6 0:cf0ddcf40339 55 wait(.2);
mmujica6 0:cf0ddcf40339 56 }
mmujica6 0:cf0ddcf40339 57 }
mmujica6 0:cf0ddcf40339 58
mmujica6 0:cf0ddcf40339 59 void open() {
mmujica6 0:cf0ddcf40339 60 m.speed(-1);
nparham3 1:3fa00a470e50 61 test = 1; // for testing purposes, the system should be running
mmujica6 0:cf0ddcf40339 62 wait(2.6);
nparham3 1:3fa00a470e50 63 test = 0;
mmujica6 0:cf0ddcf40339 64 state = 0;
mmujica6 0:cf0ddcf40339 65 }
mmujica6 0:cf0ddcf40339 66
mmujica6 0:cf0ddcf40339 67 void close() {
mmujica6 0:cf0ddcf40339 68 m.speed(1);
mmujica6 0:cf0ddcf40339 69 wait(2.6);
mmujica6 0:cf0ddcf40339 70 state = 1;
mmujica6 0:cf0ddcf40339 71 }
mmujica6 0:cf0ddcf40339 72
mmujica6 0:cf0ddcf40339 73 // Takes analog input from 0 to 1 and displays a time based on that
mmujica6 0:cf0ddcf40339 74 void printTime(double in) {
mmujica6 0:cf0ddcf40339 75 int totMins = in*1440; //maps to integer based on mins in a day
mmujica6 0:cf0ddcf40339 76 int hrs = totMins/60;
mmujica6 0:cf0ddcf40339 77 int mins = totMins%60;
mmujica6 0:cf0ddcf40339 78 timeInfo = localtime(&seconds);
mmujica6 0:cf0ddcf40339 79 lcd.locate(0,0);
nparham3 1:3fa00a470e50 80 lcd.printf("time: %2.2d:%2.2d",timeInfo->tm_hour,timeInfo->tm_min); // added percision to make it more like a clock HH:MM
mmujica6 0:cf0ddcf40339 81 lcd.locate(0,1);
nparham3 1:3fa00a470e50 82 lcd.printf("start: %2.2d:%2.2d",hrs,mins);
mmujica6 0:cf0ddcf40339 83 if ((state == 1) && (hrs == timeInfo->tm_hour) && (mins == timeInfo->tm_min)){
mmujica6 0:cf0ddcf40339 84 open();
mmujica6 0:cf0ddcf40339 85 }
mmujica6 0:cf0ddcf40339 86 }